RewriteCond -d .htaccess失败但目录存在

时间:2014-02-27 18:47:30

标签: apache .htaccess mod-rewrite

如果存在覆盖并且在RHEL5上运行的Apache 2.2 .htaccess文件中存在覆盖目录,我试图有条件地重写URI的目录路径。

我这样做是通过有条件地将环境变量设置到目录然后我检​​查环境变量是否已设置且目录是否存在。这适用于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 个答案:

答案 0 :(得分:1)

试试这个条件:

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