1

我想通过一个脚本(index.php在 web-root 中)处理所有传入的请求。

因此,以下是当前发生的情况:http://localhost/foo/bar/baz

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


这很好用,但是,在 Firefox 中我可以这样做:http://localhost/foo\-> 注意反斜杠

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

发出一个通用错误页面说:

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

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

错误 404 localhost 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

4

2 回答 2

0

可能需要关闭 AcceptPathInfo 以不让那些被容忍为正斜杠。

于 2011-01-19T01:12:55.370 回答
0

我只是在 Windows 上的 WampServer 上遇到了这个问题。这个页面有解决方案 - AllowEncodedSlashesRobertPitt 上面提到的选项是正确的,但它必须放在http.conf文件中,在 VirtualHost 块内,例如:

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

.htaccess它在文件中不起作用。

于 2012-07-10T12:34:53.720 回答