Apache RewriteRule 將區域設定新增至新 URL 時發生錯誤

Apache RewriteRule 將區域設定新增至新 URL 時發生錯誤

我正在重定向 URL,並且想在此過程中使用“RewriteRule”指令。

我目前有一個規則如下:

 RewriteRule ^/application/web/reservation/index.jsp https://application.domain.com/application2/web/reservation/audioForm.zul [R,L]

不過,如果將區域設定添加到第一個 URL 的末尾,我也希望它能夠工作。它可能是各種不同的語言環境(絕不是靜態的),因此我希望RewriteRule 獲取第一個URL 中“.jsp”之後的所有內容,並將其放置在第二個URL 中“.zul”之後。

例如:

RewriteRule ^/application/web/reservation/index.jsp(*)$ https://application.domain.com/application2/web/reservation/audioForm.zul$1 [R,L]

我相信替換部分的語法錯誤:

(*)$ and $1 respectively

為了讓您可以看到連結在區域設定中的樣子,我在下面放置了一個範例:

https://application.domain.com/application/web/reservation/index.jsp?locale=de-DE

我想在第二個 URL 中的 .zul 之後放置“?locale=de-DE”。

誰能告訴我我做錯了什麼?任何幫助將不勝感激。

此致

答案1

其實你自己的答案並不正確。

為了匹配特定的(這裡具體的字很重要)請求參數,例如您提到的“?locale = de-DE'”的例子需要一個 RewriteCond正在做。

但在這種特定情況下,由於目標 url 未指定查詢字串,mod_rewrite 的預設行為是將原始查詢字串(無論它是什麼)附加到它,除非您指定 QSD 標誌(查詢字串丟棄)。

所以,簡單來說:

RewriteRule ^/application/web/reservation/index.jsp https://application.domain.com/application2/web/reservation/audioForm.zul [R,L]

甚至:

RewriteRule ^/application/web/reservation/index.jsp$ https://application.domain.com/application2/web/reservation/audioForm.zul [R,L]

將符合以下請求:
“/application/web/reservation/index.jsp?whatever”
,並將任何查詢字串附加到您指定的目標:
https://application.domain.com/application2/web/reservation/audioForm.zul「因為它沒有指定查詢字串。

答案2

實際上,我在玩了幾個小時並研究了 mod_rewrite API 之後就弄清楚了。

Apache 模組 mod_rewrite - Apache HTTP 伺服器

代替:

^/application/web/reservation/index.jsp(*)$

我用了:

^/application/web/reservation/index.jsp(.*)

相關內容