phpEnv下SPA刷新404需手动修改vhost配置:打开C:\phpEnv\nginx\vhost{site}.conf,将location /内try_files改为$uri $uri/ /index.html,并确保root指向构建目录;子路径部署需配合alias与base调整,改完须用nginx -t验证语法并重启服务。

phpEnv 本身不干预 Nginx 配置,你得手动改它生成的 Nginx 虚拟主机配置文件,否则 SPA 刷新必然 404。
phpEnv 的 Nginx 配置在哪改
phpEnv 是 Windows 下的集成环境,它把每个站点的 Nginx 配置放在:C:\phpEnv\nginx\vhost\{your-site-name}.conf。别去动 nginx.conf 主配置,只改这个 vhost 文件。
- 修改前先停止 phpEnv 的 Nginx 服务(右键托盘图标 → Stop Nginx)
- 用记事本或 VS Code 打开对应
.conf文件,找到location / { ... }块 - 确认里面已有
root指向你的前端构建目录(如root "C:/phpEnv/www/my-react-app/build";) - 在
location /内部插入或替换为这行:try_files $uri $uri/ /index.html;
为什么不能直接套用通用配置
phpEnv 默认生成的配置往往没加 try_files,或者只写了 try_files $uri =404; —— 这对 PHP 项目够用,但对 React/Vue 是致命的。
-
$uri =404表示“找不到就真返回 404”,前端路由完全没机会接管 - 必须保留
$uri/,否则访问/assets/这类目录路径会 404(Nginx 不自动补斜杠) - 末尾必须是
/index.html(带前导斜杠),写成index.html会被当成外部重定向,触发 302,破坏 history.state
子路径部署(比如 http://localhost/admin/)要额外注意
如果你的 Vue Router 设置了 base: '/admin/',phpEnv 的配置不能只靠 root,得用 alias + 调整 try_files fallback 路径:
立即学习“PHP免费学习笔记(深入)”;
- 把
location /改成location /admin/ - 把
root换成alias "C:/phpEnv/www/my-vue-app/dist/";(注意末尾有斜杠) -
try_files改为:try_files $uri $uri/ /admin/index.html; - 确保
index.html真的存在于 dist 目录下,且构建时publicPath或homepage设为/admin/
改完重启并验证是否生效
保存配置后,右键 phpEnv 托盘图标 → Start Nginx。然后做两件事验证:
- 在浏览器直接访问一个前端路由路径(如
http://localhost/about),状态码应为200,响应体是index.html的内容,不是 404 页面 - 打开开发者工具 → Network 标签,刷新页面,检查 JS/CSS 文件(如
/static/js/main.xxxx.js)是否也返回200;如果这些也 404,说明$uri分支没生效,大概率是root路径配错了或静态资源没放对位置
最容易被忽略的是:phpEnv 启动时不会校验 vhost 配置语法,错配了也不会报错,只会静默回退到默认行为——也就是继续 404。所以每次改完必须手动 nginx -t -c "C:\phpEnv\nginx\conf\nginx.conf" 测试配置有效性。



















