我想用 apache2 建立强大的多用户开发环境。
所以我将以下文件放到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]
最后,它对于像这样的请求工作正常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
那么我该如何修复这个问题以及出了什么问题?
答案1
一个常见的误解是重写规则应该放在 .htaccess 文件中。但事实并非如此。实际上,将重写规则放在那里是个坏主意。
您可以访问您的服务器配置。您应该将您的规则放在那里(如果您选择使用任何...)
但是,对于“将未找到的所有内容重定向到 index.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>