【问题标题】:Redirect to a directory, preserving the query string重定向到目录,保留查询字符串
【发布时间】:2011-06-29 20:55:40
【问题描述】:

任何具有查询字符串的/ 请求都会导致触发 404。我发现如果我在查询字符串之前添加一个/shop/,它会在内部被重定向并且不会触发 404。

我需要一个通用的 mod_rewrite 规则,它将采用以下形式的 URL:

http://www.example.com/?foo=bar

并将其重定向到:

http://www.example.com/shop/?foo=bar

查询字符串(可以是任何东西)保存在哪里。

【问题讨论】:

  • 据我了解,您只想进行 1 次重写(而不是重定向),因此当请求 /?foo=bar 时,实际上会执行 /shop/?foo=bar(URL 保持不变),对吗?
  • 当 any 查询字符串存在时,主页 / 出于某种原因返回 404,但 /shop/ 工作正常。重写或重定向应该适用于任意数量的查询参数和任何参数名称,而不仅仅是“foo”。

标签: .htaccess mod-rewrite redirect


【解决方案1】:

这将重定向(URL将改变)所有点击到ROOT(例如http://www.example.com/),有查询字符串到http://www.example.com/shop/。

RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} !^$
RewriteRule ^$ http://www.example.com/shop/ [QSA,R,L]

这将在内部重写(URL将在浏览器中保持不变)所有命中到ROOT(例如http://www.example.com/),具有查询字符串到http://www.example.com/shop/。

RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} !^$
RewriteRule ^$ /shop/ [QSA,L]

【讨论】:

  • 我应该提到该站点是基于 Miva Merchant 构建的,并且 /shop/ 会在内部自动重定向到 /。添加 RewriteRule 会导致无限重定向循环。我需要一个仅适用于带有查询字符串的 URL 的规则,因为查询字符串在内部重定向到 / 时会被剥离。
  • @Jazzerus 您还有什么其他“细微差别”?这已经改变了一切 ..并且在不知道您现有的重定向是如何完成的(Miva Merchant)的情况下,我能想到的一切充其量只是一个“疯狂的猜测”。您必须查看现有的重写规则并找出它不起作用的原因。
  • 我想我的问题可能不清楚。我需要一个仅在有查询字符串时才有效的解决方案。如果用户在没有查询字符串的情况下访问 example.com,则不应重定向到 example.com/shop。
  • @Jazzerus 如果 root 被击中并且它有一些查询字符串,那么它将 1)重定向或 2)重写为 /shop/ 保留查询字符串(你必须选择更适合你的-- 重定向或重写对这些术语感到困惑的人)。
猜你喜欢
  • 2015-03-30
  • 2015-11-26
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多