.htaccess: проверить существование файла после RewriteRule - PullRequest
0 голосов
/ 17 сентября 2010

Если в моем .htaccess есть некоторые правила:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^.*$ - [NC,L]

RewriteRule ^assets/img(.*)/([a-zA-Z0-9-_\.]*)\.(.*)\.([a-z]{2,4})$ /assets/img$1/.$2.$4/$3.$4 [NC,L]

Это вызывает /assets/img/path/image.jpg> /assets/img/path/image.jpg

Второе правило: /assets/img/path/image.small.jpg> /assets/img/path/.image.jpg/small.jpg

Теперь я хочу проверить, существует ли small.jpg, поэтомуЯ заменил последнее правило следующим образом:

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

Но это не работает.Любые идеи, как проверить существование файла, если он уже переписан другим RewriteRule?

1 Ответ

0 голосов
/ 17 сентября 2010

Сделайте наоборот: переписывайте запрос к месту назначения только в том случае, если он действительно существует:

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

Кстати: не используйте .*, если можете быть более конкретным.В этом случае [^/]+ может соответствовать только сегменту пути.

...