phpenv 防盗链需手动配置:apache 用 .htaccess(需 allowoverride all),nginx 改 vhosts 配置,php 层须用 token 校验兜底,因 referer 极不可靠。

phpEnv 是 Windows 下的本地 PHP 环境集成包,底层用的是 Apache(默认)或可选 Nginx。它不自带图形化防盗链开关,所有防盗链配置都得手动改服务器配置文件——这点和线上环境一致,但容易因路径、权限、模块启用状态出错。
Apache 下用 .htaccess 实现基础防盗链(phpEnv 默认模式)
phpEnv 默认启用 mod_rewrite 和 .htaccess 支持,但需确认:进入 phpEnv 控制面板 →「Apache 设置」→ 查看「AllowOverride」是否为 All(不是 None)。否则 .htaccess 文件会被完全忽略。
在站点根目录(如 D:\phpenv\www\myapp\)新建或编辑 .htaccess,写入:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?mydomain\.local [NC]
RewriteRule \.(jpg|jpeg|png|gif|pdf|zip|mp4)$ - [F,NC]
注意点:
-
mydomain\.local要替换成你实际绑定的本地域名,比如用 hosts 绑了127.0.0.1 test.dev,就写test\.dev - 正则里没加
https?就只匹配 http,会漏掉 https 请求(本地开发一般不用 https,但若启用了 SSL 则必须补上) -
[F,NC]表示返回 403 且忽略大小写;如果想返回自定义图片(比如“此图禁止外链”),把-换成/forbidden.jpg并确保该路径可访问 - 规则对 PHP 脚本无效——
download.php?file=xxx这类动态请求不会被拦截,得靠 PHP 层判断
Nginx 模式下修改 server 块(phpEnv 切换过 Nginx 后)
phpEnv 切到 Nginx 后,配置文件在 D:\phpenv\nginx\conf\vhosts\ 下,每个站点一个 conf 文件。直接编辑对应站点的 conf,在 server { ... } 块内插入:
location ~* \.(jpg|jpeg|png|gif|pdf|zip|mp4)$ {
valid_referers none blocked *.mydomain.local;
if ($invalid_referer) {
return 403;
}
expires 1h;
}
关键差异:
-
valid_referers none允许空 Referer(用户直接输入地址访问),blocked拦截被浏览器屏蔽 Referer 的请求(如某些隐私模式) -
*.mydomain.local匹配子域名,但注意:Nginx 的通配符不支持**或正则混用,写mydomain.local才匹配精确域名 - 这段必须放在
location ~ \.php$ { ... }块之外,否则会被 PHP 处理逻辑覆盖 - 改完要点击 phpEnv 面板上的「重载 Nginx」,不是「重启」——重载才生效且不中断连接
PHP 脚本层兜底:防止绕过 .htaccess / Nginx 规则
静态规则防不住直接调用 download.php?id=123 这类接口。必须在 PHP 里做 Referer 校验或 Token 验证:
例如 download.php 开头加:
<?php $allowed_hosts = ['mydomain.local', 'localhost'];
$referer = $_SERVER['HTTP_REFERER'] ?? '';
$host = parse_url($referer, PHP_URL_HOST) ?: '';
<p>if ($referer && !in_array($host, $allowed_hosts)) {
http_response_code(403);
exit('Forbidden');
}<p>// 后续读取文件、输出内容...
?></p>
更安全的做法是弃用 Referer,改用一次性 Token:
- 下载页生成带
token=md5($file_id . time() . $secret_key)的链接 -
download.php中验证 token 是否在 5 分钟内有效、且未被用过(用 Redis 或文件锁记录已用 token) - 验证通过后立即删除 token,避免重放
Referer 在真实场景中极不可靠——HTTPS 页面引用 HTTP 资源时浏览器会清空 Referer,某些插件、移动端 WebView、PWA 也会丢 Referer。Token 方案虽增加服务端负担,但它是唯一能真正卡住盗链的手段。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











