2010-09-17 8 views
0

Si avoir des règles dans mon .htaccess:.htaccess: vérifier l'existence de fichiers après RewriteRule

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] 

Cela provoque /assets/img/path/image.jpg> /assets/img/path/image.jpg

La deuxième règle: /assets/img/path/image.small.jpg> /assets/img/path/.image.jpg/small.jpg

maintenant, je veux vérifier si existe small.jpg , donc j'ai remplacé la dernière règle par:

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] 

Mais cela ne fonctionne pas. Des idées comment vérifier l'existence d'un fichier s'il est déjà réécrit par un autre RewriteRule?

Répondre

0

Faites-l'inverse: seulement réécrire la demande à la destination si elle existe réellement:

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] 

Soit dit en passant: Ne pas utiliser .* si vous pouvez être plus précis. Dans ce cas, [^/]+ pourrait correspondre uniquement à un segment de chemin.