Mod rewrite 无法在mod_重写中匹配%2F

Mod rewrite 无法在mod_重写中匹配%2F,mod-rewrite,url-rewriting,apache2,Mod Rewrite,Url Rewriting,Apache2,我有一套重写规则(在.htaccess中)如下所示: RewriteRule ^list/vendor/(.*)$ list.php?vendor=$1 RewriteRule ^list/product/(.*)$ list.php?product=$1 RewriteRule ^list/(.*)$ list.php?search=$1 (不过,我认为前两个问题与我的问题无关) 当我输入myserver.com/list/foo%2Cbar或者甚至myserver.com/list/foo

我有一套重写规则(在.htaccess中)如下所示:

RewriteRule ^list/vendor/(.*)$ list.php?vendor=$1
RewriteRule ^list/product/(.*)$ list.php?product=$1
RewriteRule ^list/(.*)$ list.php?search=$1
(不过,我认为前两个问题与我的问题无关)

当我输入
myserver.com/list/foo%2Cbar
或者甚至
myserver.com/list/foo/bar
时,我得到了预期的结果:list.php在
$\u get['search']
中使用
foo、bar
foo/bar
调用

但是如果我键入
myserver.com/list/foo%2Fbar
,则规则似乎不匹配!我得到了一个404错误。这里会发生什么?Apache2.2.14,如果有必要的话


(我在Firefox和Chrome上试过,结果是一样的——当然可能是浏览器出了问题)。

呸,我发现了。。。Apache选项,不能在每个目录或.htaccess中设置,默认情况下该选项处于关闭状态


如果我不能让托管人员在我的虚拟服务器上打开它,构建工作环境时间就到了。

在这种情况下,Apache可能甚至没有查看我的.htaccess文件吗?我想这可能是一个bug…错误日志包含(在信息级别):
在URI中找到了%2f(编码的“/”)。。。返回404
当您不想要或无法更改服务器配置时,可以在创建URL之前将所有
/
字符替换为
-
。这不会被编码为
%xx
字符。当您需要原始字符串时,只需再次将
-
替换为
/
。我刚刚遇到了完全相同的问题,试图将URL作为mod_rewrite URL中的参数传递。我的解决方案是对我试图传递的URL进行双重URL编码,然后在接收端对其进行解码。我使用的是JavaScript和PHP,所以在JavaScript端我使用了
encodeURIComponent(encodeURIComponent(urlToBePassed))
,因此实际上作为参数传递的是
http://example.com/url/http%253A%252F%252Ftheurl.being.passed.com%252FsomeDir%252FsomeImage.png
。有点复杂,但似乎有效。