2014-02-27 53 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