Apache防盗链核心是用SetEnvIfNoCase定义合法Referer(含空值),再通过FilesMatch对jpg等资源限制访问;必须启用mod_setenvif模块,置于Directory块内,2.4版用Require env=local_ref,测试用curl -e模拟来源。
在 apache 主配置文件(如 httpd.conf)中用 setenvifnocase referer 配置防盗链,核心是:定义合法来源(包括空 referer),再对特定文件类型做访问控制。关键不是写在哪一层,而是确保作用范围正确、模块已启用、语法适配 apache 版本。
确认基础模块已启用
打开 httpd.conf,检查并取消注释以下两行:
-
LoadModule rewrite_module modules/mod_rewrite.so(虽本方案不用 rewrite,但部分环境依赖) -
LoadModule setenvif_module modules/mod_setenvif.so(必须启用,SetEnvIfNoCase来自此模块)
在合适位置添加防盗链逻辑
不能直接写在主配置顶层,需包裹在 <directory></directory> 或虚拟主机块内。推荐放在对应站点的 <directory></directory> 段中,例如:
<directory>
# 允许自身域名和空 Referer
SetEnvIfNoCase Referer "^$" local_ref
SetEnvIfNoCase Referer "^(https?://)?(www\.)?yourdomain\.com" local_ref
SetEnvIfNoCase Referer "^(https?://)?(www\.)?cdn\.yourdomain\.com" local_ref
<pre class="brush:php;toolbar:false;"># 限制敏感文件类型(按需调整后缀)
<filesmatch>
# Apache 2.4+ 写法(推荐)
Require all denied
Require env local_ref
# Apache 2.2 或兼容写法(如需支持旧版本)
# Order Allow,Deny
# Allow from env=local_ref
</filesmatch>
注意:yourdomain.com 要替换成你的真实域名;正则中 (https?://)? 匹配 http/https 可选,(www\.)? 支持带或不带 www;\. 是转义点号,避免误匹配。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
区分 Apache 版本的访问控制指令
Apache 2.4 起弃用 Order/Allow/Deny,改用 Require。若不确定版本,可同时保留两套(Apache 2.4+ 会忽略旧指令):
- 2.4+ 生效:
Require all denied+Require env local_ref - 2.2 兼容:
Order Allow,Deny+Allow from env=local_ref
测试时可用 apachectl -t 验证语法,无报错再 apachectl graceful 平滑重载。
验证是否生效
用 curl 模拟不同 Referer 请求:
-
curl -I -x127.0.0.1:80 yourdomain.com/image.jpg→ 应返回 200(空 Referer 允许) -
curl -e "https://yourdomain.com/page.html" -I -x127.0.0.1:80 yourdomain.com/image.jpg→ 应返回 200 -
curl -e "https://baidu.com" -I -x127.0.0.1:80 yourdomain.com/image.jpg→ 应返回 403(拒绝)









