apache防盗链核心是通过rewriterule配合rewritecond判断http_referer是否合法,对图片等资源执行[f,l]拦截或[r,l]重定向;推荐写法包括放行空referer、本站域名(含www/https)、限定文件后缀,并可结合cookie二次校验防伪造。

Apache 的 RewriteRule 配合防盗链,核心是通过判断 HTTP_REFERER 头是否来自合法来源,再对特定资源(如图片、视频)执行拦截或重定向。写法不难,但关键在条件严谨、路径准确、标志合理。
基础防盗链 RewriteRule 写法(推荐用法)
这是最常用、最稳妥的方式,放在 .htaccess 或虚拟主机配置中:
-
启用重写引擎:必须有
RewriteEngine On -
排除合法来源:用多个
RewriteCond放行自己的域名(含 www 和无 www)、空 Referer(直接访问页面)、以及可能的测试环境 -
匹配目标资源:通常限定后缀,如
\.(jpg|jpeg|png|gif|webp|svg|mp4|pdf)$ -
执行动作:推荐用
[F,L]返回 403 禁止访问;也可用[R=302,L]跳转到提示图,例如http://yourdomain.com/forbidden.png
示例(替换 yourdomain.com 为实际域名):
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp|svg|mp4|pdf)$ - [F,L]注意 Referer 匹配的细节
Referer 是客户端发送的请求头,容易被伪造,但仍是第一道有效防线。写规则时要注意:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
!^https?://同时兼容 http 和 https -
(www\.)?匹配带或不带 www 的域名 -
\.com中的点必须转义,否则会匹配任意字符 -
[NC]表示不区分大小写,避免因大小写导致误拦 - 开头加
RewriteCond %{HTTP_REFERER} !^$ [NC]很重要——允许直接输入 URL 访问(空 Referer),否则自己网站内链接或书签也会被拦
进阶:配合 Cookie 做二次验证(防工具盗链)
单纯靠 Referer 容易被下载工具绕过。更可靠的做法是结合 Cookie 校验:
- 在网页 HTML 中嵌入 JS 或服务端逻辑,向用户浏览器写入一个带时效性的 Cookie,例如
auth_token=abc123 - 在 RewriteRule 前增加条件:
RewriteCond %{HTTP_COOKIE} !auth_token=[a-zA-Z0-9]+ [NC] - 再配合资源匹配和
[F,L]拦截,没 Cookie 就拒绝 - 这样即使盗链者知道真实 URL,没有 Cookie 也无法访问
示例片段:
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
RewriteCond %{HTTP_COOKIE} !auth_token= [NC]
RewriteRule \.(jpg|png|mp4)$ - [F,L]调试与生效前提
规则写完不生效?检查这几项:
- 确认
mod_rewrite已启用:a2enmod rewrite(Debian/Ubuntu)或取消httpd.conf中#LoadModule rewrite_module的注释 - 若用
.htaccess,确保对应目录的AllowOverride设为All(不是None) - 重启 Apache 或重载配置:
systemctl reload apache2或apachectl graceful - 测试时用隐身窗口或清除缓存,避免 301 重定向被浏览器缓存干扰;调试阶段优先用
[R=302,L]而非[R=301,L]










