2009-08-11 47 views
17

我爲一位客戶構建了一個新的PHP站點,並且希望將舊站點結構中排名最高的Google搜索結果重定向到新站點結構。使用GET參數時,Apache Redirect 301失敗,例如?blah =

我已經在documentroot的.htaccess中放了好幾十個Redirect 301's,雖然有些工作正常,但我遇到了一堆其他問題。

這工作得很好:

Redirect 301 /nl/flash/banner_new.swf http://www.example.com/actueel/nieuws.html?action=show&f_id=152 

這不起作用! (導致一個404由於重定向被簡單地跳過):

Redirect 301 /nl/index.php?mID=24511&subID=0 http://www.example.com/solutions/printsolutions.html 
Redirect 301 /nl/index.php?mID=24512&subID=0 http://www.example.com/support/koppeling-met-omgeving.html 

的重定向在.htaccess文件中混合,並只與GET參數重定向出現失敗。

是否有解決方法?忽略失敗的重定向不是客戶的選擇。謝謝你的想法。

回答

15

雖然Gumbo's answer's的推理是正確的,我不能讓他重寫規則工作。

添加另一個RewriteCond做到了。以下經過測試並且工作正常。

RewriteCond %{REQUEST_URI} /nl/index.php$ 
RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$ 
RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html [L,R=301] 
+2

「RewriteRule」的實際模式取決於它在服務器配置中還是在.htaccess文件中使用,以及.htaccess文件所在的位置。 – Gumbo 2009-08-12 14:51:37

12

Redirect確實只對URL路徑操作:

URL路徑是一個斜線開始區分大小寫(%-decoded)路徑。 [...]

所以URL查詢(第一?達後的第一#後的部分)不進行檢查。

但是你可以用mod_rewrite做到這一點:

RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$ 
RewriteRule ^nl/index\.php$ http://www.example.com/solutions/printsolutions.html [L,R=301] 
RewriteCond %{QUERY_STRING} ^mID=24512&subID=0$ 
RewriteRule ^nl/index\.php$ http://www.example.com/support/koppeling-met-omgeving.html [L,R=301] 
12

既濃湯的和馬亭的答案達成一致......不過:

錯字中的Martijn的,應該是「^」開始的REQUEST_URI條件的正則表達式:

RewriteCond %{REQUEST_URI} ^/nl/index.php$ 

我也只能得到Martijn的,而不是Gumbo的,在我的.htaccess文件所在的地方工作。

此外,如果您不希望重寫時傳遞參數字符串,則應添加「?」在網址的結尾:

RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html? [L,R=301] 

否則,下面的Martijn的代碼,它讀取「如果您的網址是/nl/index.php?mID=24511 &的subID = 0然後重定向到http://www.example.com/solutions/printsolutions.html?mID=24511&subID=0和301永久重定向標題,並且不對這個URL處理更多規則「

這可能是也可能不是你想要的,並且如果參數不被理解就會被公平地視爲一般規則,它們會被忽略而不會造成任何傷害,所以它可能無所謂。但是,如果你想重定向一個人到一個新的頁面,並希望「漂亮的網址」,然後剝離參數字符串是可取的,所以堅持「?」在目標網址的末尾。

+0

偉大的指出如何將默認的GET字符串參數傳遞給「?」在最後簽字......正在尋找那個。 – 2012-03-22 11:03:16

+1

的?評論對這篇文章是一個很好的補充。 – 2014-02-20 12:26:35