2013-08-27 89 views
1

我需要在.htaccess中執行條件重寫規則。有條件的重寫規則

我有規則的JS文件,並規則爲其他請求。

# Rule for js files 
RewriteRule ^client/js/([A-Za-z0-9./]+)$ server/js.php 

#Rule for other requests 
RewriteRule (.*) server/controller.php 

在規則的情況下,任何請求總是去controller.php。如何使規則邏輯是這樣的:

if (jsRule) { 
    go_to_js_php(); 
} else { 
    go_to_default_controller(): 
} 

回答

3

默認情況下,Apache的mod_rewrite從頂部執行每RewriteRule至底部。

因此,當第一個匹配時,您的第二個規則將被執行並匹配,因爲它是一個通用的catch-all,因此會匹配新的url。

你的情況的解決方法是強制mod_rewrite的停止執行的第一條規則匹配之後,這是通過添加[L](最後)標誌的重寫規則進行:

# Rule for js files 
RewriteRule ^client/js/([A-Za-z0-9./]+)$ server/js.php [L] 

#Rule for other requests 
RewriteRule (.*) server/controller.php 

它簡單地指定當且僅當該規則實際匹配時,當前規則將是mod_rewrite執行的最後一個規則。

有關此標誌的更多詳細信息,請參閱http://httpd.apache.org/docs/current/en/rewrite/flags.html#flag_l