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

Apache 服务器 不支持 valid_referers 指令。
valid_referers 是 Nginx 特有的指令,属于 ngx_http_referer_module 模块,仅在 Nginx 配置中有效。Apache 没有同名、同功能的内置指令,因此在 Apache 的 ServerName 或任何 <virtualhost></virtualhost> 配置块中直接写 valid_referers 会导致语法错误,配置无法加载。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
✅ Apache 实现图片防盗链的正确方式
Apache 主要通过 mod_rewrite + RewriteCond 检查 %{HTTP_REFERER} 来实现 Referer 白名单校验,逻辑与 Nginx 的 valid_referers 类似,但写法不同:
示例:只允许本站及搜索引擎访问 JPG/PNG 图片
<virtualhost>
ServerName example.com
DocumentRoot /var/www/html
# 针对图片资源启用防盗链
<locationmatch>
# 允许空 Referer(直接访问、书签、HTTPS→HTTP 降级等)
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
# 允许本站域名(含 www 和子域)
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC]
# 允许主流搜索引擎(可选)
RewriteCond %{HTTP_REFERER} !^https?://.*\.google\. [NC]
RewriteCond %{HTTP_REFERER} !^https?://.*\.baidu\. [NC]
RewriteCond %{HTTP_REFERER} !^https?://.*\.bing\. [NC]
# 拦截:返回 403 或重定向到提示图
RewriteRule \.(jpg|jpeg|png|gif|webp|bmp)$ - [F,NC]
# 或重定向(需确保提示图自身不受限):
# RewriteRule \.(jpg|jpeg|png|gif|webp|bmp)$ /images/hotlink-denied.png [R,L]
</locationmatch></virtualhost>
关键说明:
-
!^$:匹配空 Referer(对应 Nginx 的none) -
!^https?://(www\.)?example\.com:匹配合法来源(注意.要转义,?表示可选www,[NC]忽略大小写) -
blocked场景(如微信内嵌浏览器、代理清 Referer 后只剩localhost)在 Apache 中通常表现为Referer为空或非法格式,已由!^$覆盖 -
[F]返回 403;[R,L]重定向,需额外确保/images/hotlink-denied.png不再进入该规则(例如用<files></files>单独放行)
❌ 常见误区澄清
-
valid_referers不能 写在 Apache 的httpd.conf、.htaccess或VirtualHost中 - Apache 没有
$invalid_referer这类内置变量,所有判断必须用RewriteCond显式写出 - 若启用了 CDN,请同步在 CDN 控制台配置 Referer 白名单,并开启「透传 Referer」,否则 Apache 收不到原始 Referer
? 对比小结(Nginx vs Apache)
| 功能 | Nginx | Apache |
|---|---|---|
| 校验指令 | valid_referers none blocked ... |
RewriteCond %{HTTP_REFERER} ... |
| 空 Referer 判断 | none |
!^$ |
| 域名匹配 |
example.com, *.example.com
|
正则 https?://(www\.)?example\.com
|
| 拦截动作 | if ($invalid_referer) { return 403; } |
RewriteRule ... [F] |
| 提示图豁免 |
location = /path { }(空块) |
<files> Require all granted</files> |
不复杂但容易忽略——关键是别把 Nginx 的语法套到 Apache 里。










