【问题标题】:Is there a 301 Redirect directive that will catch-all of a URL parameter?是否有 301 重定向指令可以捕获所有 URL 参数?
【发布时间】:2016-02-04 22:04:56
【问题描述】:

我相信我的问题相当独特。我环顾四周,找不到答案。

网站管理员工具中有几份报告会显示这种性质的网址:

website.com/shop/?orderby=date

是否有 .htaccess 代码行可以将上述 URL 重定向到

website.com/shop/

并且重定向将是 301?

谢谢

【问题讨论】:

  • 根据您的标签,我假设您使用的是 Apache HTTPD。对吗?
  • 我看不出这个问题有什么“独特”之处。 // 如果要检查查询字符串的内容,则必须使用RewriteCond 来执行此操作。
  • “如果它在任何子页面上,它将重定向到使用它的 URL 的主子页面” – 这一点需要澄清。你认为什么是“子页面”,什么是“主子页面”?您至少可以显示一些 from->to 示例 URL。

标签: .htaccess redirect mod-rewrite


【解决方案1】:

这似乎相对简单。如果您只想在查询字符串中搜索“orderby=val”,如果找到,请重定向到基本 URI,试试这个:

RewriteBase /
RewriteCond %{QUERY_STRING} orderby=
RewriteRule ^(.*)$ $1? [R=301]

这假设您已经在主配置中启用了重写模块:

LoadModule rewrite_module modules/mod_rewrite.so

更新:示例 2:

RewriteBase /
RewriteCond %{QUERY_STRING} orderby=
RewriteRule ^shop/ products? [R=301]

【讨论】:

  • 嗨,布兰登,这实际上比我想象的要复杂。是否对您的代码进行了编辑,我一次只能做一个?例如,我们找到了许多以下 URL(不存在): /shop/?orderby=date --- 你能显示我的一段代码,它只处理那个 URL 并将它重定向到“任何页面”我喜欢?在这种情况下,它将被重定向 (301) 到 website.com/products/ --- 感谢 Brandon!
  • 是的,您可以修改 RewriteRule 的模式以使其更具区分性,使其仅作用于特定的 URI 匹配...例如/shop/ 并修改替换以重定向到您想要的任何 URI。我已经用第二个例子更新了我的答案。有用的文档:RewriteRuleRewriteCondRegEx
  • @njames 第二个例子有帮助吗?
  • 嗨,布兰登,感谢您的回答。不过,您的解决方案似乎都没有奏效。我敢打赌,尽管该站点使用的是 wordpress,但它是一个服务器设置,并且有一个似乎正在使用/工作的 mod_rewrite 模块。无论哪种方式,您的第一个解决方案都会在 orderby=anything 的页面上导致 500 错误,而第二个解决方案没有执行任何操作 - orderby=anything 仍保留在 URL 中。我将尝试对我的问题进行另一个修订。再次感谢您。
  • @njames 很抱歉听到这些不起作用。那么这里肯定还有其他东西在起作用。这些 RewriteRules(单独)都不会继承查询字符串(orderby=)。因此,必须存在执行范围问题或其他一些重写或重定向或别名......等。这是冲突的(即对结果进行预处理或后处理)。
猜你喜欢
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 2017-01-20
  • 2014-01-06
  • 2016-05-21
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多