phpEnv默认使用Nginx+PHP-FPM且不支持.htaccess,启用伪静态须手动修改vhost配置:在location /块中添加try_files $uri $uri/ /index.php?$query_string;,并确保location ~ \.php$与之共存、顺序合理,改后需phpenv nginx restart生效。

phpEnv 默认用的是 Nginx + PHP-FPM,不支持 .htaccess,必须直接改 Nginx 配置文件才能启用伪静态。
Nginx server 块里必须加 try_files 规则
phpEnv 的 Nginx 配置中,location / 段默认不包含重写逻辑,访问 /user/123 这类路径会直接 404。你需要手动补上 fallback 行为:
-
try_files $uri $uri/ /index.php?$query_string;是最通用、兼容性最好的写法,适用于 Laravel、ThinkPHP、自定义路由等大多数场景 - 如果项目依赖
$_SERVER['PATH_INFO'](比如某些老版本 ThinkPHP),得改用rewrite ^/(.*)$ /index.php/$1 last;,并确保 PHP-FPM 配置里fastcgi_split_path_info正确分割路径 - 别用
if (!-e $request_filename)包裹rewrite—— Nginx 官方明确不推荐在location外用if,容易引发重复匹配或变量丢失
phpEnv 的配置文件路径和重启方式
phpEnv 把每个环境的 Nginx 配置单独存放,不是全局 nginx.conf:
- Windows 下路径通常是:
phpenv\nginx\conf\vhost\your-site.conf(your-site是你建环境时填的名字) - Linux/macOS 下类似:
~/.phpenv/nginx/conf/vhost/xxx.conf - 改完后不能只 reload,要先执行
phpenv nginx restart(或点面板上的「重启 Nginx」按钮),否则规则不加载 - 改错导致 Nginx 启动失败?用
phpenv nginx test(或nginx -t)检查语法,错误提示会直接指出哪一行有问题
PHP 入口文件要能正确解析原始路径
光配 Nginx 不够,index.php 得拿到真实请求路径,否则伪静态等于白设:
立即学习“PHP免费学习笔记(深入)”;
- 用
$_SERVER['REQUEST_URI']最稳妥,它始终是浏览器地址栏里的完整路径(如/post/abc) - 如果想用
PATH_INFO,需确认 phpEnv 的 PHP-FPM 配置中fastcgi_param PATH_INFO $fastcgi_path_info;已启用,且SCRIPT_NAME和PATH_INFO被正确分离(常见坑:Nginx 把/a/b/c全塞进SCRIPT_NAME,PATH_INFO为空) - 测试是否生效:在
index.php里写<?php var_dump($_SERVER['REQUEST_URI'], $_SERVER['PATH_INFO'] ?? null); ?>,访问/test/123看输出
真正容易被忽略的是 Nginx 配置层级 —— phpEnv 的 vhost 文件里,location ~ \.php$ 和 location / 必须共存且顺序合理,否则 try_files 根本没机会触发。



















