必须将nginx的root指令指向thinkphp 8.0项目的public/目录,否则因vendor/autoload.php路径错误导致class 'think\app' not found且静默白屏;需配try_files和正确的fastcgi_param script_filename。

root 必须指向 public/ 目录,否则直接白屏
ThinkPHP 8.0 的入口文件 index.php 已移入 public/ 子目录,且框架内部路径(如 vendor/autoload.php)全部基于该目录为基准。若 Nginx 的 root 指向项目根目录(如 D:/www/myapp),PHP 加载自动加载器时会失败,报 Fatal error: Class 'think\App' not found,但错误被静默吞掉,页面仅空白。
必须显式设置:
-
root D:/www/myapp/public;(Windows)或root /var/www/myapp/public;(Linux) - 末尾分号不能省,路径中不要有多余空格或反斜杠
- 改完后执行
nginx -t校验语法,再nginx -s reload
别用 if (!-e $request_filename),改用 try_files
if 在 Nginx 中有已知副作用:在 Windows 下易导致 PATH_INFO 为空、$args 丢失、POST 数据截断,而 ThinkPHP 8.0 默认依赖 PATH_INFO 解析路由,一空就静默失败。
正确写法是:
location / {
try_files $uri $uri/ /index.php?s=$uri&$args;
}
注意三点:
-
&是 HTML 实体,在 Nginx 配置里必须写成&,写成&会导致nginx -t报错 -
s=$uri对应框架默认的pathinfo_fetch方式;若你改过配置(如设为['QUERY_STRING']),就得改成/index.php?$uri&$args - 该规则必须放在
location / { }块内,不能套在if或其他嵌套逻辑里
fastcgi_param SCRIPT_FILENAME 必须拼对路径
即使 try_files 转发成功,若 SCRIPT_FILENAME 拼出的路径不是 public/index.php,PHP 就找不到入口文件,Nginx 日志报 Primary script unknown。
确保 location ~ \.php$ 块中包含这三行(顺序不重要,但缺一不可):
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
常见错误:
- 漏掉
PATH_INFO或PATH_TRANSLATED—— 导致路由解析失败 - 用
$request_filename替代$document_root$fastcgi_script_name—— Windows 下路径大小写/分隔符不一致时失效 - 没配
fastcgi_split_path_info正则(虽非强制,但建议加上):fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
验证是否真由 Nginx 引发白屏?先绕过它
别一上来就调 Nginx 配置。先确认问题边界:
- 直接访问
http://localhost/index.php/index/user能显示内容 → 说明 PHP 和 ThinkPHP 本身正常,问题纯属 Nginx 转发逻辑 - 该地址也空白 → 查
runtime/log/或 PHP 错误日志,可能是runtime目录权限、php.ini关闭了display_errors,或url_route_on被关了 - 打开 Nginx 错误日志(如
c:\phpstudy_pro\extensions\nginx1.22.1\logs\error.log),搜FastCGI sent in stderr表示 PHP 执行了但崩溃;搜Primary script unknown表示路径根本没拼对
多应用(如 admin 和 index)场景下,每个子应用的伪静态仍走同一套规则,但 root 和 try_files 不需要为每个应用单独写 location —— 只要入口统一落在 public/index.php,路由层会自动分发。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











