【发布时间】:2012-02-20 13:32:24
【问题描述】:
我有下面的设置;带有测试设置的非常简单的 URL 重写设置
// ----- test.php -----
<?php
phpinfo();
// ----- test.php -----
test.local 的配置如下。
<VirtualHost *:80>
ServerName test
ServerAlias test.*
DocumentRoot /var/www/test
</VirtualHost>
<Directory "/var/www/test/">
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* test.php/$0 [R,NE]
</Directory>
现在,如果我发出请求 GET http://test.local/my-path-info,默认的 phpinfo() 页面会按预期显示,如果我在路径信息中添加斜杠,那也可以。但是,如果我在 URL 中添加一个编码的正斜杠 %2F(例如 GET http://test.local/my-path-info%2fsomething-else),它会显示为 404 Not found。基本上它不会进入 php 文件。
知道为什么会发生这种情况,以及如何解决吗?
安装在 Apache 2.2.13,Linux 上的 PHP 5.3.8 (Centos 5.x)。
注意:我在这里要做的是将正斜杠添加到路径信息组件之一中,这样它就不会被 MVC 框架中的路由器逻辑解释。如果不对其进行编码,路由器将无法区分作为路径分隔符的斜杠和作为路径组件一部分的斜杠。
【问题讨论】:
-
你不想让
正文中的 指令不成为 Apache 全局指令吗? -
谢谢@Skittles,你说得对;但同时它是正确的配置,特定于我的设置。
标签: apache mod-rewrite url-rewriting urlencode httpd.conf