RewriteCond всегда проверяет ложность - PullRequest
1 голос
/ 27 октября 2010

У меня есть регулярное выражение в моем RewriteRule, которое в настоящее время работает нормально. Во-вторых, я хотел бы проверить, существует ли файл (в котором переписан запрос). Поэтому я поместил RewriteCond перед моим правилом, но, к сожалению, он всегда проверяется на false

Это мое регулярное выражение:

assets/img(.*)/([a-zA-Z0-9-_\.]*)\.([^/]+)\.([a-z]{2,4})

И я создал этот .htaccess:

RewriteCond assets/img$1/.$2.$4/$3.$4 -s
RewriteRule ^assets/img(.*)/([a-zA-Z0-9-_\.]*)\.([^/]+)\.([a-z]{2,4})$ assets/img$1/.$2.$4/$3.$4 [NC,L,QSA]
RewriteRule ^assets/img(.*)/([a-zA-Z0-9-_\.]*)\.([^/]+)\.([a-z]{2,4})$ assets/img/image.php?path=$1&file=$2.$4&key=$3&ext=$4 [NC,L,QSA]

Запрос без RewriteCond, где существует переписанное местоположение, работает нормально. Для тех, кто заинтересован, мой полный .htaccess размещен здесь: http://pastie.org/1293667

1 Ответ

1 голос
/ 27 октября 2010

Проблема в том, что RewriteCond применяется только к правилу, которое следует сразу после него, поэтому ваш второй RewriteRule всегда выполняется. Одно из решений - отменить тест, который вы выполняете, а затем следующую команду пропустить две команды, которые вы хотите запустить .

RewriteCond %{DOCUMENT_ROOT}assets/img$1/.$2.$4/$3.$4 !-f
RewriteRule . - [S=2]
RewriteRule ^assets/img(.*)/([a-zA-Z0-9-_\.]*)\.([^/]+)\.([a-z]{2,4})$ assets/img$1/.$2.$4/$3.$4 [NC,QSA]
RewriteRule ^assets/img(.*)/([a-zA-Z0-9-_\.]*)\.([^/]+)\.([a-z]{2,4})$ assets/img/image.php?path=$1&file=$2.$4&key=$3 [NC,L,QSA]
...