2013-03-27 205 views
0

我有一個htaccess的,看起來像這樣htaccess的重寫文件夾

RewriteEngine On 
RewriteCond %{REQUEST_URI} !static/(.*)\. 
RewriteRule ^(.*)$ index.php?controller=$1 [QSA] 

它工作正常。 /靜態文件夾請求保持不變,而其他文件則執行index.php文件。 但現在我必須添加另一個規則。當用戶導航到/ action/something時,應該執行/actions/something.php。但是,當我添加以下行

RewriteRule ^action/(.*)$ actions/$1.php [QSA] 

它將請求中斷到靜態文件夾。

回答

1

沒有理由,爲什麼它應該打破static,除非您在RewriteCond之後立即寫下新規則。然而,你應該做的,重寫到一個絕對的URL

RewriteEngine On 
RewriteCond %{REQUEST_URI} !static/(.*)\. 
RewriteRule ^(.*)$ /index.php?controller=$1 [QSA] 
RewriteRule ^action/(.*)$ /actions/$1.php 

RewriteCond看起來很不尋常。除非是有原因的改寫靜態頁面沒有點.,你應該減少RewriteCond只是

RewriteCond %{REQUEST_URI} !static/ 

更新

爲了防止無限重寫,你必須添加另一排除條件

RewriteCond %{REQUEST_URI} !^/index\.php$ 

action和必須排除以及

RewriteCond %{REQUEST_URI} !/actions?/ 

全部放在一起給

RewriteEngine On 
RewriteCond %{REQUEST_URI} !/static/ 
RewriteCond %{REQUEST_URI} !/actions?/ 
RewriteCond %{REQUEST_URI} !^/index\.php$ 
RewriteRule ^(.*)$ /index.php?controller=$1 [QSA] 
RewriteRule ^action/(.*)$ /actions/$1.php 
+0

完美,謝謝!儘管你可能有一個錯誤,因爲控制器行應該是RewriteRule^/(。*)$ /index.php?controller=$1 [QSA](注意正則表達式中的正斜槓)。否則它會導致無限重定向,因爲錯誤日誌狀態 – 2013-03-28 04:17:44

+0

@VladimirHraban不,前綴斜槓可防止循環,但也會停止調用控制器。我更新了答案。 – 2013-03-28 08:31:45