Eri*_*ink 13 mod-rewrite escaping querystring apache-2.2
我们在传递查询字符串时遇到了 Apache mod_rewrite 行为的一个奇怪问题(也许是一个错误?)。
为了重现,我们使用默认的 Apache 配置设置了一个干净的 Ubuntu (oneiric) 安装。我们启用了 mod_rewrite,并且在默认站点配置中,我们添加了以下内容:
RewriteEngine on
RewriteRule ^/(.*)$ /r/$1 [R]
Run Code Online (Sandbox Code Playgroud)
为了测试,我们使用 curl:
curl -I 'http://[ubuntu-machine]/a/b%20c?a%20b'
Run Code Online (Sandbox Code Playgroud)
相关输出是:
HTTP/1.1 302 Found
Server: Apache/2.2.20 (Ubuntu)
Location: http://[ubuntu-machine]/r/a/b%20c?a%2520b
Run Code Online (Sandbox Code Playgroud)
如您所见,查询字符串被双重转义,这是错误的。有谁知道我们如何解决这个问题?我们尝试了几件事:
/的a和b部分之间被转义。手动取消转义查询字符串。
RewriteCond %{QUERY_STRING} .*
RewriteMap unescape int:unescape
RewriteRule ^(.*)$ $1?${unescape:%{QUERY_STRING}}
Run Code Online (Sandbox Code Playgroud)
然而,这意味着我们无法区分查询字符串中的an&和 an 转义&符。
更新:
此错误报告描述了相同的问题。第一条评论链接到一个明显解决问题的提交,但正如 Pieter 在下面所说的,它似乎并没有真正修复。
这似乎是 Apache 中的一个错误。这个错误报告有点乱,但准确地描述了你的问题:
https://issues.apache.org/bugzilla/show_bug.cgi?id=34602
看起来他们已经意识到了这个问题。尽管该错误声称已修复,但我已使用 Apache 2.3.15 对此进行了测试,但问题似乎仍然存在。另请注意,Apache 2.3 是一个测试版,因此即使它确实修复了它,它对您也没有用处,直到 Apache 2.4 发布。
| 归档时间: |
|
| 查看次数: |
6398 次 |
| 最近记录: |