phpEnv防盗链本质是Apache配置,需启用mod_rewrite、设AllowOverride All,并在.htaccess中用RewriteCond校验Referer,允许空来源及指定域名访问图片等资源。

phpEnv 默认不带 Nginx,它用的是 Apache —— 所以你根本配不了 Nginx 防盗链。强行找 nginx.conf 或在 phpEnv 里“切换服务器”是白忙活。
确认你用的真是 Nginx?
phpEnv 是 Windows 下的 Apache + PHP + MySQL 集成环境,界面里看到的“Nginx”选项通常是误导性标签或第三方插件,实际进程里跑的仍是 httpd.exe。验证方法很简单:
- 打开任务管理器 → 查看“后台进程”,找有没有
nginx.exe;没有,就说明没在跑 Nginx - 打开 phpEnv 控制面板 → 点“服务状态”,Apache 显示“运行中”,Nginx 显示“未安装”或“已禁用”
- 访问
http://127.0.0.1页面底部,通常会写明 Server: Apache/2.x.x
Apache 下正确配防盗链的三步关键操作
既然底层是 Apache,就得按 Apache 的路子来:启用模块、放开权限、写规则。缺一不可,否则 .htaccess 就是废纸。
- 编辑
Apache/conf/httpd.conf,取消注释这行:LoadModule rewrite_module modules/mod_rewrite.so - 找到你网站目录对应的
<Directory "D:/phpEnv/www">块,把里面的AllowOverride None改成AllowOverride All - 在网站根目录(如
D:/phpEnv/www)新建文件.htaccess,用记事本“另存为”,编码选 UTF-8 无 BOM,文件名必须带英文点
.htaccess 规则里最容易错的几个点
网上抄来的规则常直接报 500 或完全不生效,问题多出在细节上:
立即学习“PHP免费学习笔记(深入)”;
-
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.local [NC]中的yourdomain\.local必须和你在 phpEnv 里实际配置的本地域名一致(比如test.dev),不能留空或写localhost—— 浏览器同源策略会让http://localhost和http://test.dev被视为不同源 - 别漏掉
RewriteCond %{HTTP_REFERER} !^$,否则直接在地址栏输图片 URL 会 403,连本地调试都做不了 -
RewriteRule \.(jpg|jpeg|png|gif)$ - [F]的[F]是返回 403,不是[R=403](后者语法错误,Apache 启动失败) - 规则只对静态文件生效,
.php文件、/api/接口不受影响,别指望它拦住 curl 调用接口盗图
真正难搞的从来不是写几行规则,而是 Apache 配置里那个 AllowOverride 默认关着,又没人告诉你得手动开 —— 这一步跳过,后面全白搭。



















