2011-12-22 76 views
3

我的PHP應用程序中有一個htaccess重寫設置,用於通過引導程序文件路由文件。實質上,我們的目標是採用諸如www.domain.com/view/key/value/key/value這樣的URL,其中視圖將相應地路由,並且鍵/值對將通過我在引導程序中寫入的函數的意見。所有工作都很好...從htaccess重寫規則中排除文件

也就是說,直到我開始做ajax-y的東西。我通過單個文件ajaxDispatcher.php來路由所有的ajax查詢。當我這樣做時,htaccess(正確)發現了請求,並使用我的引導程序進行不適當的路由。同樣,它試圖路由不需要的文件,如.ico,.css等

我想出了文件擴展名路由異常,但是,我一直無法讓.htaccess忽略重寫單個規則文件ajaxDispatcher.php。這裏就是我的代碼表示:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/ajaxDispatcher.php$ $0 [L] 
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php?route=$1 [L] 

我如何獲得的.htaccess忽略只爲ajaxDispatcher路由規則?

+0

取出ajaxDispatcher線,它應該工作 – 2011-12-22 21:11:33

回答

5

你應該將你的新規則中的RewriteCond塊之上:

RewriteRule ^/?ajaxDispatcher.php$ - [L] 

否則RewriteConditions不包括擴展重寫規則了,爲此,我認爲他們的目的。

另一種替代方法是將其轉化過程的另一個的RewriteCond:

RewriteCond %{SCRIPT_NAME} !ajaxDispatcher 

或注入其作爲斷言到最終重寫規則(?!ajaxDispatcher.php)

排序的事情最好在Serverfault解釋說:https://serverfault.com/questions/214512/everything-you-ever-wanted-to-know-about-mod-rewrite-rules-but-were-afraid-to-as

2

如果您從您顯示的代碼中刪除ajaxDispatcher.php行,它應該有效 - 由於!-f!-d規則,對重寫規則中對實際存在的文件的請求將被排除。