重定向所有包含查询字符串的 URL

Redirect all URLs containing querystrings

使用 .htaccess 如何将所有包含查询字符串的 URL 重定向到 URL 的 "canonical" 版本?

示例:

www.example.com/?bla_bla 应该重定向到 www.example.com/

www.example.com/test/?bla_bla_evil_querystring 应该重定向到 www.example.com/test/

www.example.com/test.html?bla_bla 应该重定向到 www.example.com/test.html

我正在寻找一个站点范围的解决方案,以将任何带有查询字符串的 URL 重定向到没有查询字符串的相同 URL。

谢谢!

最简单的方法是使用 mod_rewrite。

RewriteEngine on

RewriteCond %{QUERY_STRING} .
RewriteRule ^ %{REQUEST_URI} [R,QSD,L]

如果查询字符串的长度至少为 1 个字符,则此规则匹配。 QSD 标志将丢弃查询字符串。 R 标志将导致重定向。在您测试此规则按预期工作后,将 R 标志替换为 R=301 以使重定向永久化。

在尚未实现 QSD 标志的版本中,您可以使用以下代码代替。请注意,这会在您的 url 后面留下尾随 ?,但我对此无能为力。考虑将您的 Apache 升级到最新版本。

RewriteRule ^ %{REQUEST_URI}? [R,L]