【问题标题】:Redirect all URLs containing querystrings重定向所有包含查询字符串的 URL
【发布时间】:2015-10-25 10:15:37
【问题描述】:

使用 .htaccess 如何 301 将所有包含查询字符串的 URL 重定向到 URL 的“规范”版本?

例子:

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。

谢谢!

【问题讨论】:

  • 如果您的网址有任何有用的查询字符串怎么办?

标签: apache .htaccess redirect url-redirection http-status-code-301


【解决方案1】:

最简单的方法是使用 mod_rewrite。

RewriteEngine on

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

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

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

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

【讨论】:

  • 使用这个,搜索引擎会看到 301 重定向吗?忘了说:谢谢! :)
  • 其实我完全忘记添加重定向了。我已经对我的答案进行了一些编辑。
  • 再次感谢!今天会做一些测试,我会带着一个可接受的答案回来。
  • 你好。又是我。它不起作用,在我将其添加到我的 .htaccess 后,我只会收到“内部服务器错误”...
  • 看来 QSD 标志仅适用于 Apache v2.4.0 及更高版本。我有一个低版本。 QSD 的任何替代品?
猜你喜欢
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多