Apache-2.2
帶有 VirtualDocumentRoot、.htaccess 和 mod_rewrite 的無限循環
我想用 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
那麼我該如何解決這個問題,有什麼問題呢?
一個常見的誤解是重寫器屬於 .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>