2014-02-27 50 views
3

我試圖有條件地重寫URI的目錄路徑,如果存在覆蓋並且覆蓋目錄存在於RHEL5上運行的Apache 2.2 .htaccess文件中。RewriteCond -d .htaccess失敗,但目錄存在

我這樣做是通過有條件地設置一個環境變量到一個目錄,然後我檢查是否設置了環境變量和目錄是否存在。這是一個Drupal站點,但不確定是否重要。

RewriteCond %{HTTP_HOST}      qa-public.sample.com 
RewriteRule^-        [ENV=publicFiles:sites/qa-public.sample.com/files] 
... 
RewriteCond %{ENV:publicFiles}    !^$ 
RewriteCond %{ENV:publicFiles}    -d 
RewriteRule ^sites/default/files(/.*)$  %{ENV:publicFiles}$1 [PT] 

我打開重寫記錄到7級

10.20.67.192 - - [27/Feb/2014:13:16:34 --0500] [qa-public.sample.com/sid#7f631331ecd8][rid#7f631360e568/initial] (4) [perdir /var/www/qa-public/] RewriteCond: input='sites/qa-public.sample.com' pattern='!^$' => matched 
10.20.67.192 - - [27/Feb/2014:13:16:34 --0500] [qa-public.sample.com/sid#7f631331ecd8][rid#7f631360e568/initial] (4) [perdir /var/www/qa-public/] RewriteCond: input='sites/qa-public.sample.com' pattern='-d' => not-matched 

我使用的perdirinput輸出來驗證它的存在。它是一個指向目錄的符號鏈接。

$ ls -l /var/www/qa-public/sites/qa-public.sample.com/files 
lrwxrwxrwx 1 XXXXXX YYYYYY 27 Feb 13 14:20 /var/www/qa-public/sites/qa-public.sample.com/files -> /usr/local/files-qa/ 

我自己也嘗試-l-x。我也嘗試了其他非鏈接目錄。

我曾嘗試在RewriteCond之前和/或之後的目錄中添加/

我可以刪除-d條件,Apache將提供該文件。

謝謝, 韋斯。

回答

1

試試這個條件:

RewriteCond %{DOCUMENT_ROOT}/%{ENV:publicFiles} -d 
+0

謝謝,這工作。 – Wes

+0

很高興工作。您現在可以將答案標記爲已接受嗎? – anubhava

+0

對不起,我的第一篇文章並不知道接受。 – Wes