Apache RewriteRule 和斜杠 (%2F)

Apache RewriteRule 和斜杠 (%2F)

我有以下内容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):通用语法

相关内容