在 Ubuntu 上使用 Apache2 配置防盗链(Hotlink Protection),通常是通过 mod_rewrite 或 mod_setenvif 来实现。下面给你几种常见、实用的做法。
sudo a2enmod rewrite
sudo systemctl restart apache2
.htaccess(最常用)适合虚拟主机 / 没有服务器root权限的情况。
编辑站点配置(如 /etc/apache2/sites-available/000-default.conf):
<Directory /var/www/html>
AllowOverride All
</Directory>
然后重启 Apache:
sudo systemctl restart apache2
.htaccessRewriteEngine On
# 允许空 Referer(直接访问)
RewriteCond %{HTTP_REFERER} !^$
# 允许自己的域名
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
# 阻止图片、视频等被盗链
RewriteRule \.(jpg|jpeg|png|gif|webp|mp4|avi|mov)$ - [F]
✅ 效果:
编辑站点配置:
sudo nano /etc/apache2/sites-available/000-default.conf
在 <VirtualHost> 内添加:
<Directory /var/www/html>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp|mp4)$ - [F]
</Directory>
重启 Apache:
sudo systemctl restart apache2
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
RewriteRule \.(jpg|png|gif)$ /stop-hotlink.png [R,L]
SetEnvIfNoCase Referer "^https?://(www\.)?yourdomain\.com" allowed
SetEnvIfNoCase Referer "^$" allowed
<FilesMatch "\.(jpg|png|gif|mp4)$">
Require env allowed
</FilesMatch>
✅ 测试防盗链:
curl -I -e "http://badsite.com" http://yourdomain.com/image.jpg
✅ 搜索引擎图片可能受影响(可加白名单)
✅ CDN / 反向代理要注意 Referer 是否保留
如果你愿意,可以告诉我:
我可以帮你写一份精准配置。