2012-11-13 105 views
2

我自己做的在/ home /盧卡斯/網站無限循環使用的mod_rewrite和vhost_alias

<VirtualHost *:80> 
     ServerName vm01.dev 
     ServerAlias *.vm01.dev 

     SetEnv APPLICATION_ENV "lukasz" 

     VirtualDocumentRoot /home/lukasz/websites/%1/public 
     <directory /home/lukasz/websites/> 
       Options Indexes FollowSymLinks MultiViews 
       AllowOverride All 
     </directory> 
</VirtualHost> 

它運作良好,直到非常簡單的規則從mod_rewrite的來玩的所有目錄動態虛擬主機文件。如果我將以下代碼添加到.htacesss

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

Apache服務器將無法響應。它將進入一個無限循環,並在10次重定向之後從執行中突破。此問題與我正在使用的VirtualDocumentRoot緊密相關。我應該如何修改我的配置以保持動態並停止與htaccess相關的配置?

回答

0

我猜你想讓index.php爲默認頁面,當請求的資源不存在時,你就不說了。

如果這是然後加入的ErrorDocument進入你的虛擬主機將例如足夠的情況下

ErrorDocument 404 /index.php 

如果你要使用mod_rewrite,它更有效地放置在虛擬主機定義中的規則,而不是在一個.htaccess文件。由於httpd.conf在啓動時被讀取一次,並且編譯所有規則,而不是正在讀取的.htaccess文件,並針對每個請求解析所有規則。反正下面應該停止循環:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* /index.php [L] 

假設你有一個:的index.php

FYI:阿帕奇mod_rewrite文檔值得一讀,如果你不清楚什麼上面規則,或者如果你想要一些更抽象的東西,請考慮以下post