Apache RewriteRule 和斜线 (%2F)

Fel*_*lix 7 mod-rewrite apache-2.2

我有以下几点RewriteRule

RewriteRule ^like/(.+)$ ask.php/$1
Run Code Online (Sandbox Code Playgroud)

这适用于以下请求:

/like/someting+here/something+else
Run Code Online (Sandbox Code Playgroud)

但是对于路径部分之一包含转义斜杠 ( %2F) 的请求,服务器会吐出 404 Not Found 错误:

/like/one%2Ftwo+things/
Run Code Online (Sandbox Code Playgroud)

有没有什么办法解决这一问题?我尝试了两者[B][NE]标志(单独和一起),但没有任何效果。

编辑:我也试过:

RewriteRule ^like/ ask.php
# or
RewriteRule ^like/(.*) ask.php
Run Code Online (Sandbox Code Playgroud)

所以它不一定要匹配斜杠。它仍然无法正常工作。

Joh*_*ohn 8

Apache 指令帮助了我

AllowEncodedSlashes On  
Run Code Online (Sandbox Code Playgroud)


Fel*_*lix 7

我在这里找到了答案。引用相关位:

查询字符串中允许使用裸露的“%2f”。但不是在 URL 中。为了有效,它必须被编码为 %252f,我认为你会发现它可以按预期工作。

因为 URL 本身是无效的,服务器在调用任何 apache 模块之前拒绝它。

有关更多信息,请参阅RFC2396 - 统一资源标识符 (URI):通用语法