Apache-2.2

帶有 VirtualDocumentRoot、.htaccess 和 mod_rewrite 的無限循環

  • April 23, 2013

我想用 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>

引用自:https://serverfault.com/questions/501685