Apache Directory块防盗链通过mod_rewrite限制Referer实现,需启用rewrite模块、在Directory中配置RewriteCond和RewriteRule,允许自身域名及空Referer,拦截指定静态资源;也可用SetEnvIf+FilesMatch替代。
在 Apache 的 Directory 块中配置防盗链,核心是限制非授权来源(Referer)对特定静态资源的直接访问。这种方式比 .htaccess 更高效、更可控,适合有服务器管理权限的场景。
防盗链依赖 mod_rewrite,需确保已加载:
sudo a2enmod rewrite,再 sudo systemctl restart apache2
sudo a2enmod rewrite 或检查 LoadModule rewrite_module modules/mod_rewrite.so 是否在 httpd.conf 中启用apache2ctl -t 或 httpd -t 验证语法定位到你要保护的 目录,例如 /var/www/html,在对应 <Directory> 块中添加以下内容:
<Directory "/var/www/html">RewriteEngine On# 允许自身域名(含 www 和无 www)及空 Referer(直接输入 URL 访问)RewriteCond %{HTTP_REFERER} !^http://(www.)?yourdomain.com [NC]RewriteCond %{HTTP_REFERER} !^https://(www.)?yourdomain.com [NC]RewriteCond %{HTTP_REFERER} !^$# 拦截常见静态资源(可按需增删扩展名)RewriteRule .(jpg|jpeg|png|gif|webp|svg|mp4|webm|pdf|css|js)$ - [F,L]</Directory>
说明:
[NC] 表示不区分大小写;[F] 返回 403 Forbidden;[L] 表示终止后续规则!^$ 排除空 Referer,若希望允许直接访问(如用户手动输入图片地址),必须保留此项RewriteCond,例如再加一行 RewriteCond %{HTTP_REFERER} !^https://trusted-site.org [NC]
适用于不启用 mod_rewrite 的环境,或想配合 Order/Allow/Deny 使用:
<Directory "/var/www/html"># 定义白名单 Referer(支持正则,注意转义点号)SetEnvIfNoCase Referer "^https?://(www.)?yourdomain.com" local_refSetEnvIfNoCase Referer "^$" local_ref# 可选:添加其他可信站点SetEnvIfNoCase Referer "^https?://cdn.yourdomain.com" local_ref
<FilesMatch ".(jpg|jpeg|png|gif|mp4|pdf)$">Order Deny,AllowDeny from allAllow from env=local_ref</FilesMatch>
</Directory>
注意:Order Deny,Allow 在 Apache 2.4+ 中已被 Require 替代,若用新版建议改用:
<FilesMatch ".(jpg|jpeg|png|gif)$">Require env local_ref</FilesMatch>
配置保存后务必重启 Apache(sudo systemctl restart apache2 或 sudo systemctl restart httpd),再测试:
curl -e "https://badsite.com" -I https://yourdomain.com/image.jpg 应返回 403/var/log/apache2/error.log 或 /var/log/httpd/error_log,排查规则未生效原因AllowOverride None 不会覆盖规则——Directory 块中的配置优先级高于 .htaccess