我想通过一个脚本(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
中的一些设置。
可能的错误:https://issues.apache.org/bugzilla/show_bug.cgi?id=42499,也尽量添加到您的htaccess'AllowEncodedSlashes On' – RobertPitt
@RobertPitt:谢谢,我不知道'AllowEncodedSlashes '。但是,将它添加到我的'.htaccess'文件时,服务器ISE(HTTP 500)。这发生在我的本地开发框(Windows)以及我的网络主机(Linux)上。看看它的Apache文档,它的上下文似乎被列为:'服务器配置,虚拟主机',所以不支持'.htaccess'? – NuCalTone