如果我使用:HT訪問 - 現代重寫
RewriteEngine On
RewriteRule ^.* controller.php
這將發送所有的請求Controller.php這樣 但如果Controller.php這樣一個包含CSS文件(/assets/css/main.css),那麼它將無法正常工作,因爲當瀏覽器調用它時,它只會重定向到controller.php
有沒有辦法解決這個問題?
如果我使用:HT訪問 - 現代重寫
RewriteEngine On
RewriteRule ^.* controller.php
這將發送所有的請求Controller.php這樣 但如果Controller.php這樣一個包含CSS文件(/assets/css/main.css),那麼它將無法正常工作,因爲當瀏覽器調用它時,它只會重定向到controller.php
有沒有辦法解決這個問題?
你可以添加一個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
試試這個:
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.css$
RewriteRule ^.* controller.php
未經測試,但應該工作。
這不是一個很好的安全情況,因爲它允許直接訪問存在的文件。如果你知道我的意思,就默默無聞。 – AbiusX 2011-05-13 16:05:46