我试图找出如何在我的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
答案 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]
解决方案是在要使用的参数之前和之后添加".*?"
。
我不知道这是否是最佳解决方案,但它确实有效。