<p>phpEnv 的 Nginx 配置文件位于 C:\phpEnv\nginx\conf\vhosts\ 下对应站点的 .conf 文件;需在 server 块顶层添加 location ~ /. { deny all; } 和 location ~ ^/(.git|.svn|.hg|.project|composer.json|package.json)$ { deny all; },并确保 location ~ .php$ 正确配置且有兜底规则 location ~* ^/.+.php$ { try_files $uri =404; },修改后须重载 Nginx。</p>

phpEnv 是一套本地 PHP 开发环境工具,常用于 Windows 下快速搭建 Apache/Nginx + PHP + MySQL 组合。它默认将网站根目录设为 www 或 htdocs 子目录,但不会自动封禁 .git、.svn 等敏感目录——一旦这些目录被意外暴露,攻击者可直接下载完整源码。
phpEnv 的 Nginx 配置文件在哪改
phpEnv 的 Nginx 配置实际由它生成并托管,路径通常是:C:\phpEnv\nginx\conf\vhosts\your-site.conf(或 default.conf)。不要改 nginx.conf 主配置,否则升级 phpEnv 时容易被覆盖。直接编辑对应站点的 vhosts 下的 conf 文件即可。
修改前务必备份原文件;改完需在 phpEnv 控制面板中点击「重载 Nginx」或手动执行:nginx -s reload(进入 C:\phpEnv\nginx\ 目录下运行)。
location ~ /\. { deny all; } 必须放在最外层 server 块里
很多用户把这条规则塞进某个 location / 里面,结果无效——因为正则匹配的 location ~ \. 必须和 location / 并列,且优先级高于前缀匹配。正确位置示例:
立即学习“PHP免费学习笔记(深入)”;
server {
listen 80;
server_name localhost;
root "C:/phpEnv/www";
<pre class='brush:php;toolbar:false;'># ✅ 正确:独立 location,放 server 块顶层
location ~ /\. {
deny all;
}
# ✅ 同时封禁常见版本控制目录(注意 ^/ 开头)
location ~ ^/(.git|.svn|.hg|.project|composer.json|package.json)$ {
deny all;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}}
火山引擎数字人视频生成技能。用户上传照片并提供对白或配音文案后,系统自动完成形象创建、TTS配音(性别检测与多音色匹配)及视频合成,并将结果返回。触发词:数字人、视频合成、口播视频、数字人视频。
-
location ~ /\. { deny all; }拦所有以.开头的路径,包括/.git/config、/.env -
location ~ ^/(.git|.svn)是额外加固,防止某些代理或重写绕过点号规则 - 这两条都不能放在
location /内部,否则 Nginx 不会匹配到
为什么 .git 目录还能被访问?检查这三个地方
即使加了规则,仍能打开 http://localhost/.git/config,大概率是以下任一原因:
- 规则写在了错误的
server块里(比如写在了另一个未启用的虚拟主机配置中) - phpEnv 启用了「多站点」但你改的是 default.conf,而当前访问走的是另一个 vhost
- 浏览器或代理缓存了 200 响应,用隐身窗口或
curl -I http://localhost/.git/config直接测 HTTP 头 - Windows 文件系统权限允许 IIS 或其他服务接管了该路径(少见,但若装过 XAMPP 可能冲突)
PHP 源码泄露不止靠 .git,还要防 .php 文件裸奔
phpEnv 默认用 PHP-FPM,但如果 location ~ \.php$ 配置缺失或顺序错乱,用户请求 /config.php 会直接返回源码文本——这不是 bug,是 Nginx 把它当静态文件读了。
务必确认你的 vhost 中有且仅有如下结构(顺序不能颠倒):
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
<h1>⚠️ 关键补丁:堵住没被 fastcgi 处理的 .php 请求</h1><p>location ~* ^/.+.php$ {
try_files $uri =404;
}第二段 location ~* ^/.+\.php$ 是兜底:只要 URL 路径含 .php 且前面没被上面的 ~ \.php$ 匹配到(比如路径带多余斜杠或编码),就直接 404,不给任何机会返回源码。
真实踩坑点:phpEnv 某些旧版模板里,try_files 只写了 $uri $uri/ /index.php?$args,漏掉了对孤立 .php 文件的拦截,这个细节极易被忽略。


















