Apache不支持valid_referers指令,该指令为Nginx特有;防盗链需用mod_rewrite的RewriteCond检查%{HTTP_REFERER},必须放行空Referer(!^$)、锚定正则、加[NC]忽略大小写,并用[F]返回403或重定向提示图。

匹配 Referer 主要用 RewriteCond 结合 %{HTTP_REFERER} 变量,注意大小写不敏感、空 Referer 处理和正则转义等细节。
基础语法:匹配特定来源域名
例如只允许来自 example.com 或其子域的请求访问 /api/:
RewriteCond %{HTTP_REFERER} ^https?://([a-z0-9.-]+\.)?example\.com [NC]-
RewriteRule ^api/ - [F,L](拒绝非匹配来源)
说明:[NC] 表示忽略大小写;\. 转义点号;^https?:// 匹配 http:// 或 https:// 开头;空 Referer(如直接输入 URL)不会命中该条件。
处理空 Referer 或无 Referer 请求
浏览器直接地址栏访问、HTTPS 页面引用 HTTP 资源等情况会导致 Referer 为空。可用以下方式匹配:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
RewriteCond %{HTTP_REFERER} ^$→ 匹配空 Referer -
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?mydomain\.com [NC]→ 排除本站,其余都算“非法来源”
常见组合:先放行本站和白名单,再统一拦截其余请求。
匹配多个域名(或逻辑)
用 [OR] 连接多个条件,但需注意优先级:
RewriteCond %{HTTP_REFERER} ^https?://.*\.google\.com [NC,OR]RewriteCond %{HTTP_REFERER} ^https?://.*\.bing\.com [NC,OR]RewriteCond %{HTTP_REFERER} ^https?://.*\.yahoo\.com [NC]RewriteRule ^download/ - [F,L]
注意:最后一条条件不能加 [OR],否则逻辑会出错;所有条件默认是“与”关系,加 [OR] 后变为“或”。
安全提示:Referer 可伪造,不可用于鉴权
Referer 是客户端发送的 HTTP 头,容易被 curl、Postman 或浏览器插件篡改,仅适合做轻量防盗链或统计过滤:
- 不要用它替代 session、token 或 IP 白名单等真实鉴权手段
- 静态资源(如图片、JS、CSS)可用
RewriteCond %{HTTP_REFERER} !^$+ 白名单防外站盗链 - 动态接口务必结合后端身份校验

















