apache基于域名虚拟主机配置防盗链的核心是启用mod_rewrite模块并利用rewritecond检查http_referer字段,仅允许空referer或本域(如example.com)来源访问.jpg、png等静态资源,否则返回403 forbidden;规则需置于块内,且须确保loadmodule rewrite_module已启用。
apache 基于域名的虚拟主机配置防盗链,核心是利用 mod_rewrite 模块检查请求头中的 referer 字段,只允许本域或空来源访问指定静态资源(如图片、css、js),其他来源则拒绝或重定向。关键在于规则写在对应域名的 <virtualhost></virtualhost> 块内,且需确保 rewrite 模块已启用。
确认并启用 rewrite 模块
先检查模块是否已加载:
- 运行
apachectl -M | grep rewrite,看到rewrite_module (shared)表示可用 - 若未启用,编辑主配置文件(如
/etc/httpd/conf/httpd.conf或/usr/local/apache2/conf/httpd.conf),取消以下行的注释:LoadModule rewrite_module modules/mod_rewrite.so
在虚拟主机配置中添加防盗链规则
假设你已配置好基于域名的虚拟主机(例如 www.example.com),在对应的 <virtualhost></virtualhost> 块内添加如下内容:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|css|js|webp|svg)$ - [F]
-
RewriteCond %{HTTP_REFERER} !^$:允许用户直接在浏览器地址栏输入图片 URL 访问(空 Referer) -
RewriteCond ... example\.com/ [NC]:允许来自example.com或www.example.com的请求([NC]不区分大小写) -
RewriteRule ... - [F]:对匹配后缀的文件返回403 Forbidden;也可改为重定向到提示图:RewriteRule \.(jpg|png|gif)$ /images/forbidden.png [R,NC,L](注意该图片不能放在受保护目录下)
权限与生效范围控制
规则默认作用于整个虚拟主机根目录。若只想保护某子目录(如 /images),可改用 <directory></directory> 块:
<directory>
Options None
AllowOverride None
Require all granted
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com/ [NC]
RewriteRule \.(jpg|png|gif)$ - [F]
</directory>
- 确保该目录有
Require all granted(Apache 2.4+)或Allow from all(2.2) -
AllowOverride None表示不读取 .htaccess,所有规则必须写在主配置中
重启服务并验证
保存配置后执行:
-
sudo systemctl restart httpd(CentOS/RHEL)或sudo systemctl restart apache2(Ubuntu/Debian) - 用 curl 测试:
curl -H "Referer: https://badsite.com" http://www.example.com/test.jpg→ 应返回 403 - 用浏览器打开自己网站页面,右键图片“在新标签页中打开”,应正常显示(Referer 是自身域名)










