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)的主要内容,如果未能解决你的问题,请参考以下文章

301 通过 .htaccess 将查询字符串重定向到 SEO 友好的 URL

301 重定向没有子目录/查询字符串

如何从 .htaccess 中删除 301 重定向?

htaccess 301 重定向某些 URL 模式

htaccess 重定向附加查询字符串?

从 301 重定向中删除查询字符串