Mod rewrite 无法在mod_重写中匹配%2F
我有一套重写规则(在.htaccess中)如下所示: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
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
。有点复杂,但似乎有效。