通过htaccess访问已存在图片时打开指定PHP文件的规则怎么写?
问题原因
你原有规则不生效的核心原因有两个:
- 服务器默认开启的
MultiViews内容协商功能优先级高于mod_rewrite,会直接返回匹配到的已存在实体文件,跳过重写逻辑 - 若你的.htaccess中存在全局通用的重写规则(例如CMS默认配置),通常会自带
RewriteCond %{REQUEST_FILENAME} !-f(跳过已存在文件)的判断条件,导致存在的jpg文件不触发后续重写。
正确配置
将jpg专属重写规则放在所有其他重写规则的最前面,完整配置如下:
# 关闭内容协商避免自动匹配实体文件 Options -MultiViews RewriteEngine On # 所有.jpg后缀请求全部重写至根目录image.php,无视文件是否存在 RewriteRule \.jpg$ /image.php [L,QSA]
可选优化配置
如果你只需要对/uploads/目录下的jpg生效,避免影响其他目录的正常图片访问,可以修改规则为:
RewriteRule ^uploads/.*\.jpg$ /image.php [L,QSA]
你可以在image.php中通过$_SERVER['REQUEST_URI']获取用户原始请求的图片路径,做后续业务逻辑处理。
内容的提问来源于stack exchange,提问作者João Pereira
相关产品推荐
相关产品推荐

