mod_rewrite中的奇怪行为更改

时间:2010-01-07 11:36:47

标签: apache mod-rewrite url-rewriting fastcgi

.htaccess上下文中,我有一个简单的重写规则:

RewriteEngine on
RewriteRule ^dir/([^/]+)/(.*) action/do.php?a=$1&b=$2 [L,QSA]

diraction位于同一目录中,也是我的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目录中。)

你知道导致这种行为改变的原因吗?你有没有注意到同样的事情?

1 个答案:

答案 0 :(得分:0)

好的,我发现了发生了什么。

实际上,由于DocumentRoot,我不在VirtualDocumentRoot但在mod_vhost_alias中。

使用“真实”虚拟主机时不会发生此问题。