Apache通过.htaccess实现防盗链,核心是启用mod_rewrite模块、设置AllowOverride All,并用RewriteCond匹配合法Referer(含空值和多域名白名单),再通过RewriteRule拦截非法请求并返回403或跳转提示图。

Apache 通过 .htaccess 实现防盗链,核心是拦截非法 Referer 请求并阻止资源外链。只要服务器启用了 mod_rewrite 模块、目录允许 .htaccess 覆盖(AllowOverride All),配置就能立即生效,无需重启服务。
基础防盗链规则(只允自己域名)
这是最常用也最稳妥的写法,适用于绝大多数个人或中小网站:
- 在网站根目录(或图片所在目录)创建或编辑 .htaccess 文件
- 粘贴以下内容(注意替换 example.com 为你的实际域名):
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC]
RewriteRule \.(jpe?g|png|gif|bmp|svg|webp)$ - [F,L]
说明:
• 第二行保留空 Referer(用户直接输入图片 URL 访问仍可打开)
• 第三行用正则匹配你的域名,支持 www 和非 www、http/https
• 第四行定义防护文件类型,可根据需要增删后缀(如加 |mp4|pdf)
多域名白名单(兼容合作站点)
如果你的图片被自家子站、合作站或 CDN 域名调用,需把它们一并加入白名单:
- 每增加一个允许域名,就加一行 RewriteCond,用 [OR] 连接
- 最后一行条件不带 [OR],避免逻辑错误
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC,OR]
RewriteCond %{HTTP_REFERER} !^https?://cdn\.example\.com [NC,OR]
RewriteCond %{HTTP_REFERER} !^https?://partner\.site [NC]
RewriteRule \.(jpe?g|png|gif)$ - [F,L]
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
盗链显示提示图(友好替代方案)
比起直接返回 403 错误,用一张“禁止盗链”提示图更直观,也利于排查问题:
- 提前上传一张提示图(如 /images/blocked.png)到网站可访问路径
- 将原规则中的 - [F,L] 改为跳转地址 + [R,L]
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC]
RewriteRule \.(jpe?g|png|gif)$ /images/blocked.png [R,L]
注意:使用 [R] 是 302 重定向,浏览器地址栏会变;若想隐藏跳转,可用 [R=301,L] 或配合内部重写(需额外配置)
验证与排错要点
配置完别急着上线,务必手动验证是否按预期工作:
- 新建一个本地 HTML 文件,用
外链你的图片,打开看是否加载失败或显示提示图
- 检查 Apache 错误日志(error_log),常见报错如 “RewriteCond: cannot compile regular expression” 表示正则写错
- 确认服务器已启用 mod_rewrite:
a2enmod rewrite && systemctl restart apache2(Ubuntu/Debian)或httpd -M | grep rewrite(CentOS) - 若用宝塔、cPanel 等面板,检查对应目录的“允许重写”选项是否开启










