htaccess 301redirect – 删除查询string(QSA)

我一直在努力与一些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