htaccess 301 redirect - 删除查询字符串(QSA)

时间:2014-01-14 16:22:43

标签: regex apache .htaccess mod-rewrite url-rewriting

我一直在努力解决一些htaccess重定向问题。我只是花了一些时间在堆栈上阅读和搜索,并且无法获得适用于我的场景的anwser。

我正在将旧客户网站的301重定向转换为新网站。旧页面有参数查询,我想从网址中删除。

/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]

我被正确重定向,但URL保留了查询字符串:

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]

它不起作用(最后仍有查询字符串)

谢谢!

2 个答案:

答案 0 :(得分:86)

您可以使用此规则:

RewriteRule ^menu\.php$ /new-page-name? [L,R=301]

请注意最后的?尾随{strong>用于剥离原始URI中的任何现有查询字符串。

答案 1 :(得分:28)

除了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