.htaccess规则无法在生产环境阻止图片访问的技术求助
Nginx反向代理直接绕过Apache处理图片请求
生产环境采用Nginx反向代理Apache时,若Nginx配置中单独针对.jpg/.png等图片后缀设置了静态文件访问规则,请求会被Nginx直接处理,根本不会传到Apache,.htaccess的拦截规则自然无法生效。
解决方式:修改Nginx的站点配置,移除直接处理图片的规则,将图片请求转发给Apache;或者在Nginx中添加对应的拦截规则,比如拒绝直接访问/images/1/和/images/2/下的图片文件。RewriteRule正则表达式语法错误
当前规则里的*是正则量词(匹配前一字符0次或多次),并非路径通配符。^images/1/*/.*\.(jpg|png)?$的写法无法正确匹配/images/1/folder1/10.jpg这类路径——/*/会匹配连续的/,而非实际的文件夹名称。本地Apache可能对正则解析较宽松,让规则偶然生效,但生产环境严格解析导致匹配失败。
修正后的规则(匹配单层子目录):RewriteRule ^images/1/[^/]+/.*\.(jpg|png)$ [F,NC,L] RewriteRule ^images/2/[^/]+/.*\.(jpg|png)$ [F,NC,L]若需匹配多层子目录(如
/images/1/folder1/sub/10.jpg),可调整为:RewriteRule ^images/(1|2)/.+/.+\.(jpg|png)$ [F,NC,L]Linux系统路径大小写敏感
生产环境是CentOS(Linux)系统,文件路径区分大小写。如果实际图片路径的大小写(比如/Images/1/Folder/10.jpg)和规则中的images/1/...不一致,会导致规则匹配失败。确保规则和实际路径大小写统一,或者保留规则中的NC(不区分大小写)标志。Apache全局配置限制
虽然根目录的重写规则生效,但生产环境的Apache可能开启了RewriteOptions StrictDependency等严格模式,或者mod_rewrite的配置存在差异。可以检查Apache的全局配置文件,确认mod_rewrite模块正常加载,且没有额外的规则限制.htaccess的生效范围。
内容的提问来源于stack exchange,提问作者DethoRhyne

