.htaccess:在 RewriteRule 后检查文件是否存在
如果我的 .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 重写,有什么想法如何检查文件是否存在?
If have some rules in my .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]
This causes /assets/img/path/image.jpg > /assets/img/path/image.jpg
The second rule: /assets/img/path/image.small.jpg > /assets/img/path/.image.jpg/small.jpg
Now I want to check whether small.jpg exists, so I replaced the last rule by:
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]
But that doesn't work. Any ideas how check existence of a file if it's already rewritten by another RewriteRule?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
反之亦然:仅将请求重写到目的地(如果目的地确实存在):
顺便说一句:如果可以更具体,请不要使用
.*
。在这种情况下,[^/]+
可以只匹配路径段。Do it the other way round: Only rewrite the request to the destination if it actually exists:
By the way: Don’t use
.*
if you can be more specific. In this case[^/]+
could fit to only match a path segment.