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

如何禁止指定后缀文件盗链,仅放行apple-touch开头的PNG文件?

解决防盗链规则失效问题:放行apple-touch开头PNG,拦截其他指定文件

我来帮你梳理下现有规则的问题,并且给出能正常生效的修正方案。

现有规则的核心问题

你的规则失效主要有三个原因:

  1. 第一个重写规则没有加[L]标志,导致匹配到apple-touch开头的PNG后,后续的防盗链规则依然会执行,引发逻辑冲突;
  2. 防盗链规则没有覆盖重写后的appicon.png,如果有人直接请求或盗链这个文件,会被错误拦截;
  3. 缺少对空Referer的放行,可能误拦截用户直接访问资源的合法请求。

修正后的完整规则

# 处理Apple Icons重写,匹配后立即停止后续规则执行
RewriteRule ^/?apple-touch.*\.png$ applicon.png [L]

# HOTLINKING PREVENTION 核心配置
# 放行两类文件:原始apple-touch开头的PNG、重写后的appicon.png
RewriteCond %{REQUEST_URI} !^/?(apple-touch.*\.png|applicon\.png)$ [NC]
# 放行空Referer(用户直接输入URL访问资源的场景)
RewriteCond %{HTTP_REFERER} !^$
# 放行自身域名下的请求(兼容http/https、带/不带www的情况)
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?mydomain.com/ [NC]
# 拦截指定后缀的盗链请求,返回403 Forbidden
RewriteRule \.(jpg|jpeg|png|gif|css|js)$ - [NC,F,L]

关键规则细节说明

  • [L]标志的作用:给第一个重写规则加上[L]后,只要请求匹配apple-touch开头的PNG,就会立即完成重写并停止后续所有规则的处理,直接返回资源,从根源上避免被防盗链规则拦截。
  • 放行重写后的文件:在防盗链的排除条件里加入applicon\.png,确保即使有人直接请求这个重写后的文件,也不会被误拦截。
  • 空Referer放行:很多浏览器在用户直接输入URL访问资源时,不会发送Referer头,加上RewriteCond %{HTTP_REFERER} !^$可以放行这类合法请求,避免影响正常访问。
  • 域名匹配优化:给域名正则加上结尾的/,比如mydomain.com/,可以防止恶意域名通过mydomain.com.evil.com这种形式绕过检查。

验证场景

  • ✅ 访问yourdomain.com/apple-touch-icon.png:正常重写为appicon.png并返回
  • ✅ 其他域名盗链yourdomain.com/apple-touch-icon.png:正常返回(符合放行要求)
  • ❌ 其他域名盗链yourdomain.com/style.css:返回403 Forbidden
  • ✅ 直接访问yourdomain.com/appicon.png:正常返回

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:23:12