You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.htaccess防盗链配置:允许指定爬虫、豁免目录且不硬编码自身域名

现有规则的问题说明

你写的规则存在3个核心问题:

  • 逻辑运算符误用:所有否定判断的RewriteCond使用[OR]拼接会导致逻辑永真。!A [OR] !B等价于!(A && B),只要不同时满足A和B就会触发,完全不符合「仅允许指定来源」的需求,应该把除最后一个条件外的所有[OR]删掉,使用默认的AND逻辑。
  • 开放目录规则写反:你需要/cross-origin-resources/目录下的图片不拦截,原规则的[OR]会导致这个判断完全失效。
  • 你提到的倒数第二行报错属于测试工具的兼容问题:测试工具对%{HTTP_HOST}@@%{HTTP_REFERER}拼接后的反向引用匹配校验存在局限性,实际Apache环境下这个写法本身合法,不属于语法错误。

修正后的可用配置

RewriteEngine On

# 标记所有图片请求
RewriteRule \.(bmp|gif|jpe?g|png|webp)$ - [NC,E=CHECK_IMAGE:1]

# 直接放行开放目录下的所有请求
RewriteCond %{REQUEST_URI} ^/cross-origin-resources/ [NC]
RewriteRule .* - [L]

# 同时满足以下所有条件时拦截图片请求
RewriteCond %{ENV:CHECK_IMAGE} =1
# 不是本站来源
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://\1/.* [NC]
# 不是空Referer
RewriteCond %{HTTP_REFERER} !^$
# 不在允许的爬虫来源列表中
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?bing\..+$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?facebook\..+$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?google\..+$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?instagram\..+$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?linkedin\..+$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?reddit\..+$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?twitter\..+$ [NC]
# 返回403拦截
RewriteRule .* - [F,L]

规则匹配逻辑说明

修正后的规则完全匹配你的4项需求:

  • 仅允许列表内的指定爬虫来源抓取图片,其余跨域图片请求全部拦截
  • /cross-origin-resources/目录下的所有资源无限制直接放行
  • 本站内的图片加载请求来源为自身域名,会直接跳过拦截规则,不影响访客正常浏览
  • 全程通过HTTP_HOST动态匹配当前站点域名,没有硬编码站点信息,可直接移植到其他站点使用

内容的提问来源于stack exchange,提问作者Vince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:06:03