phpenv下nginx伪静态必须手动编辑vhosts目录下的站点conf文件,在location /块中配置try_files $uri $uri/ /index.php?$query_string;,root须指向public目录,并补全fastcgi_param script_filename $realpath_root$fastcgi_script_name;等关键参数,否则路由失效或白屏。

phpEnv 下 Nginx 伪静态必须改 conf 文件,不是点“伪静态”按钮
phpEnv 是本地 Windows 环境常用工具,但它不提供宝塔那样的图形化伪静态模板管理。所有 Nginx 配置都得手动编辑 vhosts 目录下的站点配置文件(如 www.example.com.conf),否则 try_files 规则根本不会生效。
常见错误是只在 phpEnv 界面点“开启伪静态”,却没打开对应 conf 文件补上规则——这完全无效,Nginx 启动时压根不读那个开关。
- 路径示例:
phpEnv\server\nginx\conf\vhosts\www.laravel.test.conf - 必须在
location / { ... }块内写入:try_files $uri $uri/ /index.php?$query_string; - 删掉任何
rewrite ^/(.*)$ /index.php?/$1 last;类旧写法,Laravel 8+ 会因PATH_INFO解析失败而白屏 - 确认该文件里没有重复的
location ~ \.php$块,否则可能绕过 Laravel 路由直接执行 PHP
root 必须指向 public 目录,不是项目根目录
phpEnv 默认把整个 Laravel 项目文件夹设为 root,这是最常导致 404 或敏感文件泄露的原因。Nginx 的 root 指令必须明确指向 public/ 子目录,否则 index.php 找不到,.env 还可能被直接下载。
在站点 conf 文件中检查并修正这一行:
root "D:/phpEnv/www/laravel-test/public";
注意:public 不能漏,也不能写成 root "D:/phpEnv/www/laravel-test"; 后再靠 rewrite 补救——那治标不治本,且易出安全问题。
- 改完后重启 phpEnv 的 Nginx 和 PHP-FPM(界面点“重启服务”或命令行
nginx -s reload) - 验证方式:访问
http://yoursite.test/.env,应返回 404;访问http://yoursite.test应正常显示欢迎页 - 如果页面空白但无报错,大概率是
root错了,或index.php权限被 Windows 继承策略拦截(右键文件属性 → 安全 → 确保 IIS_IUSRS 或 Users 有读取权)
PHP-FPM 必须传 SCRIPT_FILENAME 正确路径,否则 $_SERVER['SCRIPT_FILENAME'] 为空
phpEnv 自带的 fastcgi_params 不包含 SCRIPT_FILENAME,而 Laravel 初始化路由严重依赖它。若缺失或写错,你会看到 “No application encryption key has been specified” 或路由全 404,但日志里没明显报错。
在 conf 文件的 location ~ \.php$ 块内,紧挨 include fastcgi_params; 后追加:
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
用 $realpath_root 而非 $document_root,因为 Windows 下符号链接少,但 $document_root 在某些 phpEnv 版本里会解析失败,导致路径拼接成空。
- 别漏掉
fastcgi_param REQUEST_URI $request_uri;,否则url()->full()可能丢参数 - 如果用了 Laravel 10+ + PHP 8.2,还建议加:
fastcgi_param PATH_INFO $fastcgi_path_info;,避免 OpCache 缓存污染 - 改完执行
nginx -t校验语法,再 reload,否则配置不加载
hosts 和 .env 必须同步,APP_URL 错了 asset() 就带 index.php
phpEnv 本地开发时,很多人只改了 hosts 添加 127.0.0.1 laravel.test,却忘了同步改 .env 里的 APP_URL。结果 asset('css/app.css') 生成的是 http://laravel.test/index.php/css/app.css,静态资源全 404。
必须确保:
-
APP_URL=http://laravel.test(协议、域名、无尾部斜杠) -
APP_ENV=local且APP_DEBUG=true(本地调试需要,不然报错不显示) - 清空缓存:
php artisan config:clear && php artisan view:clear,否则旧配置还在 bootstrap/cache 里 - 如果用了 Vite,还要确认
VITE_APP_URL也设对,否则 HMR 请求发错地址
真正容易被忽略的是:phpEnv 的 Nginx 默认不读取 X-Forwarded-Proto,所以即使你配了 HTTPS 代理,APP_URL 仍得写 http://,否则生成的 URL 全是 https 却走 http 端口,前端请求直接被浏览器拦截。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











