Проверка существования файла с помощью RewriteCond в цепочке RewriteRule - PullRequest
1 голос
/ 19 апреля 2010

Я надеюсь, что вы могли бы помочь мне здесь.

У меня есть RewriteRule, который дает вам файл crossdomain.xml в зависимости от имени домена. У меня это так, что игнорирует «.dev». строка посередине, пример:

Запрос: http://site1.dev.mydomain.com/crossdomain.xml
Возвращает файл: /etc/httpd/conf/crossdomain/site.mydomain.com.xml

RewriteCond %{HTTP_HOST} "^(.*)\.dev\.(.*)"
RewriteCond %{REQUEST_URI} "/crossdomain.xml"
    RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
    RewriteRule ^(.*)\.dev\.([^/]*)/crossdomain.xml /etc/httpd/conf/crossdomain/$1.$2.xml [L]

Вопрос: Как проверить, существует ли файл? Я попытался добавить это сверху, но это не работает:

RewriteCond  /etc/httpd/conf/crossdomain/$1.$2.xml  -f

Я думаю, потому что это связанное правило, понятия не имею. Пожалуйста, помогите.

Ответы [ 2 ]

2 голосов
/ 20 апреля 2010

Правильно, я только нашел способ обойти это, но я не прекращаю переписывать и добавляю еще один, который должен работать только в том случае, если применяется первый раз. Он проверяет, не существует ли файл, и если да, то применяет дальнейшее переписывание:

RewriteCond %{HTTP_HOST} "^(.*)\.dev\.(.*)"
RewriteCond %{REQUEST_URI} "/crossdomain.xml"
    RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
    RewriteRule ^(.*)\.dev\.([^/]*)/crossdomain.xml /etc/httpd/conf/crossdomain/$1.$2.xml

RewriteCond /etc/httpd/conf/crossdomain/$1.xml !-f
        RewriteRule /etc/httpd/conf/crossdomain/(.*)\.xml /etc/httpd/conf/crossdomain/crossdomain-default.xml [L]
1 голос
/ 20 апреля 2010

Я не думаю, что это как-то связано с правилом, вы просто сравниваете с неправильным значением.

RewriteCond %{REQUEST_FILENAME} -f

должно работать.

...