Apache静态文件防盗链通过Referer头识别来源并拦截非法引用,需启用mod_rewrite模块,在.htaccess或虚拟主机配置中设置重写规则,支持自定义403响应或跳转。

Apache 静态文件防盗链,核心是拦截非授权站点通过 Referer 头直接引用你网站的图片、CSS、JS、字体、视频等资源。它不靠加密或登录验证,而是基于 HTTP 协议中可被识别(也可被伪造)的来源标识做访问控制。实现起来不复杂但容易忽略细节。
确认并启用 mod_rewrite 模块
防盗链规则依赖 Apache 的重写引擎,必须确保 mod_rewrite 已加载:
- Debian/Ubuntu 系统执行:
sudo a2enmod rewrite && sudo systemctl restart apache2 - CentOS/RHEL 系统检查
httpd.conf中是否已启用:LoadModule rewrite_module modules/mod_rewrite.so(去掉注释) - 重启服务后,可通过
apache2ctl -M | grep rewrite或httpd -M | grep rewrite验证模块是否生效
在 .htaccess 中配置基础防盗链规则
适用于大多数共享主机或无权限修改主配置的场景。在网站根目录(如 /var/www/html)创建或编辑 .htaccess 文件,写入以下内容:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|svg|webp|css|js|woff2|ttf|mp4|webm)$ - [F,L]
说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
!^$允许用户在浏览器地址栏直接输入资源 URL 访问(空 Referer) -
https?://同时匹配 http 和 https 协议 -
(www\.)?兼容带 www 和不带 www 的域名写法 -
[NC]表示不区分大小写;[F]返回 403 Forbidden;[L]表示终止后续规则 - 文件扩展名列表可根据实际静态资源类型增删,比如加
|pdf或去除非敏感资源如ico
在虚拟主机配置中集中管理(推荐生产环境)
比 .htaccess 更高效、更安全,避免每次请求都读取和解析分散文件。编辑你的虚拟主机配置(如 /etc/apache2/sites-available/000-default.conf),在 块内添加规则:
<directory>
Options FollowSymLinks
AllowOverride None
Require all granted
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|svg|webp|css|js|woff2|ttf)$ - [F,L]
</directory>
注意:AllowOverride None 可防止 .htaccess 覆盖该配置,提升性能与可控性;修改后务必 sudo systemctl reload apache2 生效。
进阶:自定义盗链响应(可选)
不想返回冷冰冰的 403 页面?可替换为一张提示图或跳转到首页:
- 返回指定图片(需确保该图本身不被防盗链):
RewriteRule \.(jpg|png|gif)$ /images/nolink.png [R,NC,L] - 跳转到网站首页:
RewriteRule \.(jpg|png|gif)$ https://yourdomain.com/ [R=302,NC,L] - 若使用
[R]重定向,记得把目标图片放在允许 Referer 的路径下,否则会形成循环










