phpEnv中Nginx不支持.htaccess,伪静态需手动配置server块,核心是用try_files将非真实请求转至index.php并保留原始路径信息;推荐在vhost配置文件中修改,改后执行phpenv nginx restart生效。

phpEnv 中的 Nginx 不支持 .htaccess,伪静态必须手动改 server 块配置,核心是让非真实文件/目录的请求最终落到 index.php,并确保 PHP 能拿到原始路径信息。
确认配置位置和重启方式
Windows 下 phpEnv 的 Nginx 配置文件通常在:
phpenv\nginx\conf\vhost\your-site.conf(推荐)
或主配置:phpenv\nginx\conf\nginx.conf 末尾的 server 块内。
⚠️ 别改错地方:vhost 目录默认存在且被主配置 include;直接改 nginx.conf 也行,但 vhost 更规范、不易被覆盖。
改完必须执行:
phpenv nginx restart(控制面板点「重启 Nginx」也可),
仅 reload 或只重启 PHP-FPM 不生效。出错时先运行 phpenv nginx test 检查语法。
通用 try_files 规则(推荐首选)
适用于 Laravel、ThinkPHP 6+、自定义路由等大多数现代框架:
- 在 location / { } 块中写入:
try_files $uri $uri/ /index.php?$query_string;
- 含义:先找真实文件 → 再找目录 → 最后全部交由 index.php 处理,同时保留 ? 后所有参数
- 不依赖 if,安全稳定,Nginx 官方推荐
- 若项目入口不在根目录(如 /myapp/index.php),需改为 /myapp/index.php?$query_string;
ThinkPHP 5/6 兼容写法(需 PATH_INFO)
TP 默认用 s= 参数接收路由,且部分老部署依赖 PATH_INFO,此时需两步配合:
立即学习“PHP免费学习笔记(深入)”;
- location / { } 中用:
try_files $uri $uri/ /index.php?s=$uri&$args;
- location ~ \.php$ { } 中必须包含:
- 显式添加 fastcgi_param QUERY_STRING $query_string;(不能只靠 include fastcgi_params)
- 注释或删除 fastcgi_split_path_info 相关行——它会干扰 TP 的路由解析
- 确保 root 指向 public 目录(不是项目根目录)
验证是否真正生效
别只看页面能不能打开,要确认 PHP 层拿到了正确路径:
- 在 index.php 开头加一行测试代码:
<?php var_dump($_SERVER['REQUEST_URI'], $_GET['s'] ?? null, $_SERVER['PATH_INFO'] ?? null); ?>
- 访问 /user/123,输出中 $_SERVER['REQUEST_URI'] 应为 /user/123
- 若用 s= 方式,$_GET['s'] 应为 /user/123;若用 PATH_INFO,$_SERVER['PATH_INFO'] 应非空
- 如果全为空或显示 /index.php,说明 Nginx 没转发成功或 fastcgi_param 缺失



















