2010-05-29 18 views
3

我想使用mod-rewrite在兩個單獨的位置檢查文件:請求的URL和「public」目錄中請求的URL。使用改寫的RewriteCond檢查文件是否存在於多個位置

這是我到目前爲止有:

 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/public/$0 !-f #this line isn't working 
RewriteRule ^(.*)$ index.php?$1 [L] 

它可以正確地確定該文件是存在的,但它沒有正確地確定該文件是在/public/supplied/file/path/file.extension 。我該如何測試?

+0

你可以發佈你已有的代碼嗎? – 2010-05-29 13:06:57

+0

虛線是第三個,這是評論「這條線路不工作」。 – futuraprime 2010-05-29 13:42:27

+0

我已經意識到問題是public /不在根目錄中。它位於.htaccess所在的相同目錄中。是否有辦法獲取.htaccess所在的目錄,因此這可以在不同的位置工作,而無需手動修改每個.htaccess的.htaccess文件。 – futuraprime 2010-05-29 13:43:12

回答

4

我已經意識到問題是public /不在根目錄中。它位於.htaccess所在的相同目錄中。是否有辦法獲取.htaccess所在的目錄,因此這可以在不同的位置工作,而無需手動修改每個.htaccess的.htaccess文件。

你可以做一個子請求。該-F標誌會將作爲相對路徑相對於目錄的.htaccess是這樣:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond public/$0 !-F 
RewriteRule ^(.*)$ index.php?$1 [L,B] 

注意,-F意味着更大的性能損失比-f,因爲不是隻是一個統計,生成子請求。您還應該添加B標誌來避免您的後退參考。

+1

我有類似的問題。我試圖檢查一個文件是否存在於另一個目錄中。 $ 0是否代表%{REQUEST_FILENAME}?我似乎無法得到這條線的工作:RewriteCond目錄/%{REQUEST_FILENAME} .php -f – bozdoz 2012-03-20 21:04:16

+0

+1提醒性能損失-f VS -F – 2012-12-10 18:34:58

相關問題