2010-09-17 65 views
0

後,如果在我的.htaccess一些規則:的.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重寫?

回答

0

做它倒過來:只有當它實際存在重寫請求到目的地:

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] 

順便說一句:請不要使用.*如果你能更具體。在這種情況下[^/]+可能適合只匹配路徑段。