![Apache RewriteRule 和斜杠 (%2F)](https://linux22.com/image/513851/Apache%20RewriteRule%20%E5%92%8C%E6%96%9C%E6%9D%A0%20(%252F).png)
我有以下内容RewriteRule
:
RewriteRule ^like/(.+)$ ask.php/$1
对于如下请求来说,它工作得很好:
/like/someting+here/something+else
但是对于路径部分之一包含转义斜杠(%2F
)的请求,服务器会返回 404 Not Found 错误:
/like/one%2Ftwo+things/
有什么办法可以解决这个问题吗?我尝试了[B]
和[NE]
标志(单独和一起),但没有任何效果。
编辑:我也尝试过:
RewriteRule ^like/ ask.php
# or
RewriteRule ^like/(.*) ask.php
这样它就不必与斜线匹配了。它仍然不起作用。
答案1
Apache 指令帮助了我
AllowEncodedSlashes On
答案2
我在这里找到了答案这里引用相关内容:
查询字符串中允许使用裸露的“%2f”,但 URL 中不允许。为了有效,必须将其编码为 %252f,我认为您会发现它按预期工作。
由于 URL 本身无效,因此服务器在调用任何 apache 模块之前拒绝它。
有关详细信息,请参阅For more information, seeRFC2396 - 统一资源标识符 (URI):通用语法。