【问题标题】:301 redirect urls with a slash in querystring301 重定向 url 在查询字符串中带有斜杠
【发布时间】:2015-10-12 15:16:12
【问题描述】:

我们为我们的一位客户建立了一个新的网上商店,并且正在 301 将他们的旧网址重定向到我们的正常网址。像往常一样,我们使用 .htaccess 执行此操作,如下所示:

Redirect 301 /url1/ http://www.url2.com/ 工作正常。

但是老店有这个查询字符串里面有斜线(!),例如:

/epages/14353.sf/de_DE/?ObjectPath=/Shops/61922345/Products/32428

一旦我在 htaccess 301 重定向字符串中使用它,它就会停止工作。我没有收到 500 错误或类似的错误,但是当我访问 /epages/14353.sf/de_DE/?ObjectPath=/Shops/61922345/Products/32428 时,它不会重定向。如果我将它与如下查询字符串 (/epages/14353.sf/de_DE/?ObjectPath=foobar) 一起使用,我可以访问它并被重定向,但如果其中有斜线则不能。

我尝试了反斜杠、编码等,但没有正确的结果。有任何想法吗?我尝试了AllowEncodedSlashes On,但它给了我一个 500 错误。

【问题讨论】:

  • Redirect 指令与查询字符串完全不匹配。您确定没有其他原因导致此问题吗?
  • @HansWassink 你能展示你的完整 .htaccess 吗?
  • @JonLin 你到底是什么意思?
  • @anubhava Redirect 301 /epages/14353.sf/de_DE/?ObjectPath=/Shops/61922345/Products/32428 https://www.nu.nl 这是文件中唯一的内容。老店没了,只是一个htaccess文件,有一个规则。

标签: apache .htaccess mod-rewrite url-redirection


【解决方案1】:

由于在Redirect 指令中无法匹配QUERY_STRING,因此需要使用基于mod_rewrite 的规则。

在你的根 .htaccess 中有这个:

RewriteEngine On

RewriteCond %{QUERY_STRING} ObjectPath=/Shops/61922345/Products/32428
RewriteRule ^/?epages/14353\.sf/de_DE/?$ https://www.nu.nl? [L,NC,R=301]

请务必在新浏览器中对此进行测试以避免旧的缓存数据。

【讨论】:

  • 我编写了几乎相同的重写代码,但不幸的是,我仍然收到一个 404 错误,指出找不到 /epages/14353.sf/de_DE/。快把我逼疯了……
  • 可能是他们的服务器,我会联系主机的。谢谢@anubhava
  • 我这样做了,它已启用...gibblygoo 返回 500。
  • http://medidar-shop.de/epages/14353.sf/de_DE/?ObjectPath=/Shops/61922345/Products/32428
  • 我做了,但它仍然不起作用。这可能是他们的主人应该解决的问题,也许他们在某个地方有一个黑暗的潜伏者。感谢您的所有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 2013-02-11
  • 2018-12-21
  • 2015-05-27
  • 2015-07-16
  • 1970-01-01
相关资源
最近更新 更多