2009-12-15 61 views
3

如果我使用:HT訪問 - 現代重寫

RewriteEngine On 
RewriteRule ^.* controller.php 

這將發送所有的請求Controller.php這樣 但如果Controller.php這樣一個包含CSS文件(/assets/css/main.css),那麼它將無法正常工作,因爲當瀏覽器調用它時,它只會重定向到controller.php

有沒有辦法解決這個問題?

回答

6

你可以添加一個condition排除可以映射到實際存在的文件網址:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^.* controller.php 

-f關鍵字將測試如果%{REQUEST_FILENAME}的絕對路徑是在文件系統中現有的常規文件的路徑而!-f恰恰相反。

但如果你要排除目錄的固定列表,你也可以這樣做:

RewriteCond $0 !^(assets|foo|bar)/ 
RewriteRule ^.* controller.php 

這種情況的測試,如果整個RewriteRule模式(與$0參考)在比賽未開始既沒有assets/也沒有foo/也沒有bar/。如果你不想處理比賽,你也可以直接在RewriteRule指令使用否定的表達:

RewriteRule !^(assets|foo|bar)/ controller.php 
+0

這不是一個很好的安全情況,因爲它允許直接訪問存在的文件。如果你知道我的意思,就默默無聞。 – AbiusX 2011-05-13 16:05:46

0

試試這個:

RewriteEngine On 

RewriteCond %{REQUEST_URI} !\.css$ 
RewriteRule ^.* controller.php 

未經測試,但應該工作。