Apache HTTPS防盗链核心逻辑与HTTP一致,但Referer匹配必须兼容http://和https://,需用^https?://(www.)?yourdomain.com(/.)?$[NC]规则,并在中配置RewriteEngine On、RewriteCond和RewriteRule - [F,L],同时全站强制HTTPS以保障Referer稳定传递。

Apache 配置 HTTPS 时加防盗链,核心逻辑和 HTTP 下一致,但必须注意 Referer 协议头的匹配要兼容 https://,否则 HTTPS 站点自身请求也会被误拦。关键不是“HTTPS 特殊处理”,而是规则要覆盖 http:// 和 https:// 两种来源。
确保 Referer 匹配支持 HTTPS
多数防盗链失效,是因为只写了 http://yourdomain.com,而 HTTPS 页面发起的图片请求,Referer 是 https://yourdomain.com,导致被拒。
- 把域名条件改成支持协议可选:用
^https?://(www\.)?yourdomain\.com(s?表示 s 可有可无) - 推荐写法(更严谨):
^https?://(www\.)?yourdomain\.com(/.*)?$,明确允许带路径 - 务必保留
[NC](不区分大小写),避免因大小写问题漏放行
在 HTTPS 虚拟主机中直接配置(推荐)
不要依赖 .htaccess,优先在启用 SSL 的 <virtualhost></virtualhost> 块里写规则,更安全、更可控:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<VirtualHost *:443>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
DocumentRoot /var/www/html
<pre class="brush:php;toolbar:false;"># SSL 配置(略)
SSLEngine on
SSLCertificateFile ...
SSLCertificateKeyFile ...
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$ # 允许空 Referer(直接输入地址访问)
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com(/.*)?$ [NC]
RewriteRule \.(jpg|jpeg|png|gif|svg|webp|mp4|webm)$ - [F,L]
说明:
• - [F,L] 返回 403 禁止访问,比重定向更轻量、更隐蔽;
• 文件类型按需增删,常见静态资源都建议包含;
• 若同时跑 HTTP 和 HTTPS,httpd.conf 或虚拟主机中两个端口块都要加(或统一用全局规则)。
补充:防止 HTTPS → HTTP Referer 被截断问题
现代浏览器出于安全,默认在 HTTPS 页面跳转到 HTTP 页面时会清空 Referer;反过来,HTTPS 页面引用本站 HTTP 资源也可能丢失 Referer。因此:
- 确保全站强制 HTTPS(301 重定向 HTTP → HTTPS),让所有页面和资源都走 HTTPS,Referer 才能稳定传递
- 检查响应头是否含
Referrer-Policy: no-referrer-when-downgrade(默认值),这会导致 HTTPS 页面请求 HTTP 资源时 Referer 为空——所以务必统一协议 - 若必须混用,可在 HTML 中给 img 标签加
referrerpolicy="unsafe-url"(不推荐,有隐私风险)
验证与调试要点
配置后别急着上线,先验证:
- 用 curl 模拟盗链请求:
curl -H "Referer: https://bad-site.com" https://yourdomain.com/image.jpg,应返回 403 - 用浏览器开发者工具 → Network 标签,查看正常访问时图片请求的 Referer 是否为
https://yourdomain.com/xxx - 检查 Apache 错误日志:
tail -f /var/log/apache2/error.log,看是否有 rewrite 相关警告 - 确认 mod_rewrite 已启用:
a2enmod rewrite && systemctl restart apache2(Debian/Ubuntu)

















