我一直在努力与一些htaccessredirect。 我只是花了一些时间阅读和search堆栈,并没有得到一个适合我的场景的anwser。
我正在将旧客户端网站的301redirect到一个新的。 旧的页面有参数查询,我想从url中删除。
/menu.php?idCategorie=29&idDetail=172
至
/new-website-page/
我有多个查询来做,这里有一个例子:
/menu.php?idCategorie=29&idDetail=172 /menu.php?idCategorie=29&idDetail=182 /menu.php?idCategorie=29&idDetail=184 /menu.php?idCategorie=29&idDetail=256
哪些链接到不同的新页面。
这是我的尝试:
RewriteCond %{QUERY_STRING} idDetail=172 RewriteRule ^menu.php(.*) /new-page/? [R=301,L]
我得到正确的redirect,但URL保持查询string:
http://website.com/new-page/?idCategorie=29&idDetail=172
我也试过这个:
RewriteRule ^menu.php?idCategorie=29&idDetail=172$ http://website.com/new-page/? [L,R=301]
和这个:
RewriteCond %{QUERY_STRING} idDetail=172(.*)$ RewriteRule ^menu.php /new-page-name?$1 [L,R=301]
并没有工作(仍然有查询string在最后)
谢谢!
你可以使用这个规则:
RewriteRule ^menu\.php$ /new-page-name? [L,R=301]
注意尾随?
最后是用于剥离原始URI中任何现有的查询字符串 。
除了anubhava的答案外,你也可以使用Apache 2.4.0的QSD标志
RewriteRule ^menu\.php$ /new-page-name [L,R=301,QSD]
http://httpd.apache.org/docs/current/en/rewrite/flags.html#flag_qsd