phpenv默认使用apache而非nginx,防盗链需配置.htaccess并启用mod_rewrite与allowoverride all;若手动替换为nginx,则按标准nginx规则在location中配置valid_referers及if判断。

phpEnv 本身不带 Nginx,它默认用的是 Apache。所以「phpEnv Nginx 图片防盗链」这个说法本身就有问题——你得先确认自己真在用 Nginx。
如果你在 phpEnv 里手动替换了 Apache 为 Nginx(极少见),那配置方式和标准 Nginx 一致;但绝大多数用户实际面对的,是 Apache 的 .htaccess 防盗链。下面按真实场景分两块说:
确认你用的是 Apache 还是 Nginx
打开 phpEnv 控制面板 → 看「Web Server」显示的是 Apache 还是 Nginx;
或者进安装目录查进程:tasklist /fi "imagename eq nginx.exe" 或 httpd.exe;
再或者看托盘图标右键菜单里启动的是哪个服务。
绝大多数情况是 Apache ——此时配 .htaccess,不是改 nginx.conf。
Apache 场景:.htaccess 防盗链必须开 mod_rewrite 和 AllowOverride
直接丢 .htaccess 到 www/ 下基本无效,因为 phpEnv 默认禁用重写支持:
- 编辑
Apache/conf/httpd.conf,取消注释这行:LoadModule rewrite_module modules/mod_rewrite.so - 搜
<directory></directory>(路径以你实际安装位置为准),把里面的AllowOverride None改成AllowOverride All - 改完必须重启 Apache(通过控制面板点「Restart」,不是「Stop + Start」)
-
.htaccess文件名要带英文点,Windows 记事本另存时选「ANSI」或「UTF-8 无 BOM」,否则 Apache 会忽略
Apache .htaccess 规则别照抄网上通用模板
常见错误是规则写死 yourdomain.com,但你在 phpEnv 本地开发用的是 localhost、127.0.0.1 或自定义域名如 test.dev:
- 允许空 Referer(浏览器地址栏直接输图地址):
RewriteCond %{HTTP_REFERER} !^$ - 允许本地调试域名,比如你绑了
test.dev,就写:RewriteCond %{HTTP_REFERER} !^https?://(www\.)?test\.dev [NC] - 后缀匹配别漏掉大小写,加
[NC];禁止规则用[F](403),别用[R=403](语法错) - 示例最小可用规则(放
www/uploads/.htaccess):RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^https?://(www\.)?test\.dev [NC] RewriteRule \.(jpg|jpeg|png|gif)$ - [F,NC]
真用了 Nginx?那得自己配,phpEnv 不管
phpEnv 官方版没有 Nginx 集成,所谓「phpEnv Nginx」只能是你自己删了 Apache、手动装的 Nginx 并改了端口/服务绑定。这种情况下:
- 配置文件位置通常是
Nginx/conf/nginx.conf或vhost/xxx.conf - 防盗链必须写在
location块里,不能只写valid_referers就完事 -
valid_referers none blocked server_names *.test.dev test.dev;中的server_names指的是当前server_name值,不是域名字符串匹配 - 测试时注意:Chrome 直接输图片 URL 的 Referer 是空的(
none),但用微信开发者工具模拟请求可能带 Referer,结果不一致
真正容易被忽略的点是:Referer 校验纯属“防君子不防小人”。curl、Postman、甚至前端 fetch 都能伪造或清空它。本地开发阶段配个 .htaccess 图个省心可以,但别误以为这是安全防线。需要强保护的资源(比如付费图片、下载链接),得上 Token 签名或登录态校验,而不是只靠 Referer。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











