在.htaccess
上下文中,我有一个简单的重写规则:
RewriteEngine on
RewriteRule ^dir/([^/]+)/(.*) action/do.php?a=$1&b=$2 [L,QSA]
dir
和action
位于同一目录中,也是我的DocumentRoot
。
访问http://example.org/dir/a/b时,请求(并且已被)重写为http://example.org/action/do.php?a=a&b=b,而无需重定向或任何可见的内容。
然而,由于我从Apache 1.3 + mod_php升级到Apache 2.2(mpm_worker)+ PHP FastCGI(不知道它是如何相关的,但似乎是),先例规则返回404错误:
在此服务器上找不到请求的网址/var/www/action/do.php。
DocumentRoot
现已插入请求中!文件/var/www/var/www/action/do.php
显然不存在。
作为一种解决方法,我更改了规则:(在第二部分的开头添加了/
)
RewriteEngine on
RewriteRule ^dir/([^/]+)/(.*) /action/do.php?a=$1&b=$2 [L,QSA]
它有效(幸运的是,在这种情况下,我在DocumentRoot
目录中。)
你知道导致这种行为改变的原因吗?你有没有注意到同样的事情?
答案 0 :(得分:0)
好的,我发现了发生了什么。
实际上,由于DocumentRoot
,我不在VirtualDocumentRoot
但在mod_vhost_alias
中。
使用“真实”虚拟主机时不会发生此问题。