301从具有查询字符串的URL重定向到具有不同查询字符串的新域

时间:2012-04-13 05:30:37

标签: .htaccess redirect query-string http-status-code-301

我试图找出如何在我的htaccess文件中执行301重定向以将某些文件重定向到新域。以下是我需要知道如何做的事情:

旧网址:http://www.example.com/index.php?page=news&id=2366

新网址: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

2 个答案:

答案 0 :(得分:19)

您可以使用具有查询字符串匹配条件的重写规则,例如:

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了解有关其工作原理的更多信息。

答案 1 :(得分: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]

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

我不知道这是否是最佳解决方案,但它确实有效。