帝国CMS附件防盗链,图片资源保护设置
帝国CMS附件防盗链的核心原理是检查HTTP请求头中的Referer字段,只允许来自你自己站点的请求访问附件目录。
如果你发现服务器流量异常、图片被其他网站直接引用,或者想从源头减少附件被外部消耗,按下面步骤操作即可完成设置并验证效果。
先确认你的服务器环境和附件路径
动手之前需要知道两件事:Web服务器类型和帝国CMS附件实际存放目录。
常见的两种环境判断方式:
- 宝塔面板用户:进入软件商店查看已安装的是Nginx还是Apache。
- 命令行用户:执行
nginx -v或httpd -v查看。
帝国CMS默认附件目录是 /d/file/,对应服务器上的物理路径通常是网站根目录下的 d/file/。
如果你在后台修改过附件存放目录,以实际设置为准。
可在帝国CMS后台“系统设置”→“文件存放目录”中确认。
配置Referer白名单实现防盗链
防盗链的本质是告诉服务器:只有来自特定域名的请求才能读取附件。
Nginx环境配置方法
在网站对应的Nginx配置文件中,找到 server 块,在 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 之类的静态资源规则附近添加:
location ^~ /d/file/ {
valid_referers none blocked server_names *.yourdomain.com yourdomain.com;
if ($invalid_referer) {
return 403;
}
}
将 yourdomain.com 替换为你的真实域名。none 表示允许直接访问(如浏览器地址栏输入),blocked 表示允许被防火墙或代理去掉Referer的请求。
保存后执行 nginx -t 检查语法,再 nginx -s reload 重载配置。
Apache环境配置方法
在网站根目录的 .htaccess 文件中添加:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
RewriteRule \.(gif|jpg|jpeg|png|bmp|swf)$ - [F,NC]
同样替换域名后保存即可,Apache通常无需重载。
容易踩坑的几个地方
配置防盗链时,以下问题出现频率最高:
- CDN回源被拦截:如果你的站点用了CDN,CDN节点回源时Referer可能为空或为CDN域名,需要把CDN回源地址加入白名单。
- 后台预览图片失效:帝国CMS后台某些页面直接引用附件路径,建议将后台域名也加入白名单,或保留
none规则。 - 采集或推送工具异常:部分工具请求时不带Referer,如果业务依赖这些工具,需要单独放行其IP或User-Agent。
- 规则顺序错误:Nginx中
location匹配有优先级,防盗链规则应放在更具体的路径匹配中,否则可能被其他规则覆盖。
验证防盗链是否真正生效
配置完成后不要只看浏览器,要用可复现的方式验证:
在本地浏览器直接打开一张附件图片地址,正常应能显示,因为 none 被允许。
然后用命令行模拟外部引用:
curl -e "https://othersite.com" -I https://yourdomain.com/d/file/2024/01/example.jpg
如果返回 403 Forbidden,说明防盗链已生效。
返回 200 则需要检查白名单配置是否遗漏或规则未重载。
最后在帝国CMS前台文章页刷新,确认正文图片正常显示,说明没有误伤自己站点的正常访问。
常见疑问
开启防盗链后,搜索引擎还能收录我的图片吗?
主流搜索引擎抓取图片时通常会带Referer,如果担心影响收录,可以将百度、谷歌等常见搜索引擎域名加入白名单,但需自行评估是否必要。
为什么配置后自己网站图片反而不显示了?
最常见原因是白名单域名写错或漏写 www 前缀。
建议同时加入带 www 和不带 www 的域名,并确认 server_names 变量是否生效。
帝国CMS本身有没有防盗链功能?
帝国CMS后台没有直接的附件防盗链开关,防盗链需要在Web服务器层面配置,这也是本文推荐的做法。
手机端和PC端域名不同怎么办?
如果使用了独立的移动端域名,需要把两个域名都加入Referer白名单,否则手机访问时图片会被拦截。
完成以上配置后,你的帝国CMS附件防盗链就基本生效了。
建议先在小范围测试,确认正常访问和防盗效果都符合预期,再正式全站启用。