2012-04-13 228 views
6

我想弄清楚如何在我的htaccess文件中執行301重定向以將某些文件重定向到新域。這就是我需要知道怎麼做:301從具有查詢字符串的URL重定向到具有不同查詢字符串的新域

舊的URL:http://www.example.com/index.php?page=news&id=2366

新的URL:http://www.example2.com/news.php?name=23546

重定向不必自動創建。我可以硬編碼我需要在htaccess文件中重定向的頁面,我只是不知道使用的格式,因爲我讀過「標準」301重定向不適用於查詢字符串。

基本上這是我想要做的,但從我迄今爲止的研究來看,聽起來不像是可以這樣做的。

redirect 301 /index.php?page=news&id=2366 http://www.example2.com/news.php?name=23546 

回答

18

你可以使用一個重寫規則與查詢字符串匹配條件,如:

RewriteEngine On 
RewriteCond %{REQUEST_URI} ^/index.php$ 
RewriteCond %{QUERY_STRING} ^page=news&id=2366$ 
RewriteRule ^(.*)$ http://www.example2.com/news.php?name=23546 [R=301,L] 

結帳this blog page關於如何工作的更多信息。

+0

太好了。謝謝你的幫助! – 2012-04-13 06:09:45

+0

我有同樣的問題 - 我很好奇爲什麼簡單的重定向301 ...不工作,因爲它似乎應該根據我所有的谷歌搜索。 – GDP 2013-03-04 19:33:06

0

我有同樣的問題,但仍然更復雜,因爲我需要放棄其他參數。

像這樣:my-old-page.php?a=1&b=2&c=3

我需要使用的字符串之一,丟棄他人,但如果我想使用的最後一個參數(C = 3)解決方案只工作。如果我想使用的任何其他(A = 1或b = 2),它運行到404多掙扎與尋找,我找到了答案後:

RewriteCond %{QUERY_STRING} ^.* ?b=2.* ?$ (without space after the *) 

RewriteRule (.*) http://www.my-webpage.php/new-location-2? [R=301,L] 

的解決方案是之前和之後的加".*?"參數使用。

我不知道這是最好的解決方案,但它的工作原理。

相關問題