2011-01-17 48 views
1

我想通过一个脚本(web-root中的index.php)处理所有传入请求。mod_rewrite中的Apache和反斜杠

所以,以下就是目前发生的情况:http://localhost/foo/bar/baz

是Apache(通过.htaccess)发送到:http://localhost/index.php?url=foo/bar/baz


然而,这工作得很好,在Firefox中我能够做到这一点:http://localhost/foo\ - >注意反斜杠

和Apache的,而不是做:/index.php?url=foo\

发出一个通用的错误页面,指出:找不到

对象!在此服务器上找不到请求的网址 。如果您手动输入网址 ,请检查您的拼写 ,然后重试。

如果您认为这是服务器错误,请与网站管理员联系 。

错误404本地主机的Apache/2.2.14 的(Win32)DAV/2的mod_ssl/2.2.14 的OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 的mod_perl/2.0 .4 Perl/v5.10.1

直接转到:http://localhost/index.php?url=foo\但是没有问题。

,我已经看到在互联网上

所有的网站似乎能够很好地处理反斜杠(例如,http://stackoverflow.com/tags/php\\\\\)。

我认为这种行为是一个错误,我想强制Apache正确地转发反斜杠。 这是我.htaccess文件中的全部:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [L] 

我怎样才能使这项工作正常?


编辑:我刚刚在我的网络主机上试过这个,这个问题由他们正确处理。让我觉得这是httpd.conf中的一些设置。

+0

可能的错误:https://issues.apache.org/bugzilla/show_bug.cgi?id=42499,也尽量添加到您的htaccess'AllowEncodedSlashes On' – RobertPitt

+0

@RobertPitt:谢谢,我不知道'AllowEncodedSlashes '。但是,将它添加到我的'.htaccess'文件时,服务器ISE(HTTP 500)。这发生在我的本地开发框(Windows)以及我的网络主机(Linux)上。看看它的Apache文档,它的上下文似乎被列为:'服务器配置,虚拟主机',所以不支持'.htaccess'? – NuCalTone

回答

0

可能需要将AcceptPathInfo关闭才能获得容忍的正斜杠。

0

我只是在Windows上的WampServer上遇到这个问题。 This page有解决方案 - 即RobertPitt上面提到的是一个正确的选择AllowEncodedSlashes,但必须在http.conf文件去,一个虚拟主机块内,如:

<VirtualHost *:80> 
    AllowEncodedSlashes On 
</VirtualHost> 

它不会在一个.htaccess文件工作。