无限循环与VirtualDocumentRoot,.htaccess和mod_rewrite

我想用apache2build立健壮的多用户开发环境。

所以我把以下文件放在etc/apache2/sites-available/mydomain.com

 <virtualhost *:80> ServerName mydomain.com ServerAlias www.mydomain.com DocumentRoot /var/www/mydomain.com/prod </virtualhost> <virtualhost *:80> VirtualDocumentRoot /var/www/mydomain.com/%1 ServerName dev.mydomain.com ServerAlias *.dev.mydomain.com </virtualhost> 

然后将以下.htaccess文件复制到每个/var/www/mydomain.com/*目录中:

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [QSA,L,NS] 

Finaly它适用于像http://mydomain.com/这样的请求,但不适用于http://mydomain.com/foo

 Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace. [debug] core.c(3112): r->uri = /var/www/mydomain.com/foo/index.php … [debug] core.c(3118): redirected from r->uri = /var/www/mydomain.com/foo/index.php [debug] core.c(3118): redirected from r->uri = /foo 

那我该如何解决这个问题呢?

一个常见的误解是重写过程属于.htaccess文件。 他们没有。 其实把rewriterules放在那里是一个坏主意。

您可以访问您的服务器configuration。 你应该把你的规则(如果你select任何…)

但是,有一个更好的解决scheme“redirect没有findindex.php的一切”。 这是使用fallbackresource:

http://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource

 <virtualhost *:80> VirtualDocumentRoot /var/www/mydomain.com/%1 ServerName dev.mydomain.com ServerAlias *.dev.mydomain.com FallBackResource /index.php </virtualhost>