htaccess 301 重定向 - 删除查询字符串 (QSA)
Posted
技术标签:
【中文标题】htaccess 301 重定向 - 删除查询字符串 (QSA)【英文标题】:htaccess 301 redirect - Remove query string (QSA) 【发布时间】:2014-02-02 19:20:14 【问题描述】:我一直在为一些 htaccess 重定向而苦苦挣扎。我只是花了一些时间在堆栈上阅读和搜索,但找不到适用于我的场景的 anwser。
我正在将旧客户网站的 301 重定向到新网站。旧页面有我想从 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]
我的重定向正确,但 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]
而且没用(最后还是有查询字符串)
谢谢!
【问题讨论】:
【参考方案1】:你可以使用这条规则:
RewriteRule ^menu\.php$ /new-page-name? [L,R=301]
注意末尾的?
,它用于剥离原始 URI 中的任何现有查询字符串。
【讨论】:
【参考方案2】:除了 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
【讨论】:
以上是关于htaccess 301 重定向 - 删除查询字符串 (QSA)的主要内容,如果未能解决你的问题,请参考以下文章