如果存在覆盖并且在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
我使用了perdir
和input
的输出来验证它是否存在。它是指向目录的符号链接。
$ 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将提供该文件。
谢谢, 韦斯。
答案 0 :(得分:1)
试试这个条件:
RewriteCond %{DOCUMENT_ROOT}/%{ENV:publicFiles} -d