2012-04-13 239 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] 

的解决方案是之前和之后的加".*?"参数使用。

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

相关问题