在 CentOS 上为 Apache2 配置防盗链
一 概念与适用范围
二 方案一 使用 mod_rewrite 按 Referer 拦截外链(推荐)
RewriteEngine On
# 允许本站(含 www 子域)与空 Referer(浏览器直输/新标签打开等)
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC]
RewriteCond %{HTTP_REFERER} !^$
# 对常见静态资源生效,可按需增减后缀
RewriteRule \.(jpg|jpeg|png|gif|bmp|webp|svg|ico|mp3|mp4|zip|rar|pdf)$ - [F,L]
三 方案二 使用 SetEnvIfNoCase + FilesMatch 的访问控制(传统 Allow/Deny)
<Directory "/var/www/html">
# 定义白名单 Referer(忽略大小写)
SetEnvIfNoCase Referer "^https?://(www\.)?example\.com" local_ref
SetEnvIfNoCase Referer "^https?://partner\.example\.org" local_ref
SetEnvIfNoCase Referer "^$" local_ref
# 仅对指定后缀的资源应用规则
<FilesMatch "\.(txt|doc|mp3|zip|rar|jpg|jpeg|png|gif|bmp|webp|svg|ico|pdf)$">
Order Allow,Deny
Allow from env=local_ref
# 其他来源将返回 403
</FilesMatch>
</Directory>
四 验证与注意事项
curl -I -e "http://evil.com/" http://example.com/images/1.jpg