【问题标题】:htaccess howto rewrite an encoded slash in urlhtaccess 如何重写 url 中的编码斜杠
【发布时间】:2016-03-30 20:26:12
【问题描述】:

我有一个带有编码斜杠 (%2F) 的 URL,我无法获得重写规则来正确捕获它。

我的网址是:

http://example.com/some-path/description%2Frest-of-description/1101

我尝试过如下重写:-

# is the %2F interpreted as a path separator
RewriteRule ^some-path/(.*)/(.*)/(.*)$ /property/view?ref=$3 [B,R=301,L]
# or is it as an encoded string
RewriteRule ^some-path/(.*)%2F(.*)/(.*)$ /property/view?ref=$3 [B,R=301,L]
# or even double encoded
RewriteRule ^some-path/(.*)%252F(.*)/(.*)$ /villas/$1-$2/$3 [B,R=301,NE,L]

我也尝试在上面添加QSA

在 SO here 上有一个类似的问题,但它是基于 IIS 和 .NET 的

我正在运行 LAMP 堆栈

【问题讨论】:

  • @Nikhil 您应该将其添加为答案(提供更多信息)。
  • 我尝试将 AllowEncodedSlashes On 添加到虚拟主机并在所有请求中获得 500 ... apache 2.4
  • 只是为了确认一下,使用AllowEncodedSlashes Off(默认)你会得到系统生成的 404(即服务器的默认404,而不是自定义的404页面)吗?跨度>

标签: php apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

出于安全原因,Apache 拒绝 %2F。见urlencoded Forward slash is breaking URL

您可以在服务器配置中使用 AllowEncodedSlashes 指令关闭此功能。

但是,如果您可以控制这部分代码,最好对 URL 进行编码。

【讨论】:

  • 谢谢,但无法正常工作。如果放置在 httpd.conf 或 vhosts 中,则给出 500。可能是 OSX 错误(我的开发机器)……稍后会在 linux 机器上尝试。
  • 看看这篇文章有没有帮助:stackoverflow.com/questions/4390436/…
  • 是的,就是这样-谢谢!只是为了记录,我不能对网址进行不同的编码,因为它们已经在谷歌索引中。事实上,在尝试重新映射它们时,我遇到了这个错误。
猜你喜欢
  • 2012-05-20
  • 1970-01-01
  • 2015-03-19
  • 2013-12-26
  • 2010-10-10
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多