2012-07-17 46 views
3

我一直在測試環境中爲客戶做一些URL重寫,在我的環境中工作正常,但是當我移動到他們的時候,我得到不同的結果並且規則失敗。301重定向規則在不同的託管環境中給出了不同的結果

我在下面的格式301個重定向遺留的動態網址:

http://www.companyname.com/page.php?pagename=AboutCompany&lang=EN 
to 
http://www.companyname.com/EN/about-company/ 

使用規則集低於這個作品在我的「心互聯網」共享主機正常,但無法對他們的「去爸爸」共同主辦(CONFIGS下面)。在Go Daddy環境中,遺留網址被重定向到:

http://www.companyname.com/GET/about-company/ 
instead of 
http://www.companyname.com/EN/about-company/ 

'GET'來自哪裏?這是一個沒有其他代碼影響這些規則的準系統頁面。

RewriteCond %{QUERY_STRING} pagename=AboutCompany 
RewriteCond %{QUERY_STRING} lang=([^&]+) 
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /page.php 
RewriteRule ^page.php$ /%1/about-company/? [R=301,L] 

RewriteRule ^([A-Za-z]+)/about-company$ page.php?pagename=AboutCompany&lang=$1 [NC,L] 
RewriteRule ^([A-Za-z]+)/about-company/$ page.php?pagename=AboutCompany&lang=$1 [NC,L] 

的 '郎' 的查詢字符串取決於不同的用戶語言偏好(EN或FR或DE等)

測試環境:
的Windows
IIS7.5
PHP 5.3.6

客戶環境:
Linux的
阿帕奇
PHP 5.2

感謝,M.

+0

IIS的重寫引擎是不一樣的Apache的 – 2012-07-17 11:44:49

+0

嗨喬恩,謝謝,我知道他們是不同的,因此wh我列出了環境。不過,我想知道如何在apache環境中獲得相同的行爲。 – MonkeeX 2012-07-17 11:52:47

回答

1

哪裏了 'GET' 來了嗎?這是一個沒有其他代碼影響這些規則的準系統頁面。

在這個片段中你的規則,你有一個反向引用您的RewriteRule%1。這涉及到最後()比賽在前面RewriteCond,這恰好是(GET|HEAD)

​​

你想圍繞切換的2個條件:

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /page.php 
RewriteCond %{QUERY_STRING} lang=([^&]+) 
RewriteRule ^page.php$ /%1/about-company/? [R=301,L] 

從而使%1引用([^&]+)

+0

或者嘗試使'(GET | HEAD)'作爲未引用(所以它不能被%N返回引用):'(?:GET | HEAD)' - 這種方法被認爲更安全這裏根本不重要) – LazyOne 2012-07-17 12:44:02

+0

非常好,謝謝Jon和Lazy。這現在已經解決了。我認爲%1看第一個條件,而不是最後一個匹配。我曾認爲這可能是得到的來源,但鑑於我的理解(或缺乏),這似乎並不正確。再次感謝。 – MonkeeX 2012-07-17 17:12:44

相關問題