如何为指定URL路径排除Apache Hotlink Protection(盗链保护)?
解决盗链保护规则中排除特定路径的问题
我来帮你搞定这个问题~你之前添加的排除规则没生效,核心原因是匹配条件写得不对:
你用的RewriteCond %{REQUEST_URI} !/admin/thumbs$是在匹配路径刚好以/admin/thumbs结尾的请求,但你的目标URL是/admin/thumbs/image.jpg——路径里/admin/thumbs后面还有文件名,这个条件根本匹配不上,自然不会跳过盗链检查。
正确的规则写法
调整排除条件,让它匹配所有以/admin/thumbs/开头的请求(注意后面的斜杠,避免误匹配类似/admin/thumbsup/这类路径),同时还可以优化一下原有重复的Referer检查条件,让规则更简洁:
RewriteEngine on # 首先排除/admin/thumbs/下的所有资源,跳过后续盗链检查 RewriteCond %{REQUEST_URI} !^/admin/thumbs/ [NC] # 检查Referer是否来自自家域名(合并原有的两个条件,更简洁) RewriteCond %{HTTP_REFERER} !^https://(www\.)?domain(.*)?$ [NC] # 对指定后缀的文件返回403禁止访问 RewriteRule \.(gif|GIF|jpg|JPG|PNG|png|jpeg|JPEG|mp4|MP4|mkv|MKV|webm|WEBM|ico|ICO)$ - [F]
关键细节说明
RewriteCond %{REQUEST_URI} !^/admin/thumbs/ [NC]:!^表示“不以指定字符串开头”,[NC]开启忽略大小写匹配,这样所有/admin/thumbs/xxx.jpg这类路径的请求都会直接跳过后续的盗链检查。- 合并后的Referer条件:用一个规则就可以覆盖“域名本身”和“域名带后续路径”的情况,避免重复写两个几乎一样的条件。
测试注意事项
修改规则后,记得清空浏览器缓存或者用隐私模式测试——因为浏览器可能缓存了之前的403禁止响应,导致新规则看起来没生效。
内容的提问来源于stack exchange,提问作者Pheonix Solutions
相关产品推荐
相关产品推荐

