ThinkPHP 8.0 单应用伪静态配置需三步:Nginx root 指向 public 目录;主 location 用 try_files $uri $uri/ /index.php?$query_string;PHP 块中正确设置 SCRIPT_FILENAME、PATH_INFO 和 PATH_TRANSLATED 三参数。

ThinkPHP 8.0 单应用模式下伪静态配置,核心就三件事:Nginx 的 root 必须指向 public 目录、主 location 用 try_files 安全转发、PHP 块中 SCRIPT_FILENAME 路径必须拼对。漏掉任一环,轻则路由 404,重则页面空白不报错。
确保 Nginx root 正确指向 public
这是最常出错的一步。TP8.0 入口已强制移入 public/,vendor/autoload.php 等路径都以它为基准。若 root 指向项目根目录(如 /var/www/myapp),框架根本加载失败,直接白屏。
- 正确写法(Linux):
root /var/www/myapp/public; - 正确写法(Windows):
root D:/www/myapp/public; - 末尾分号不能省,路径中不要有多余空格或反斜杠
- 改完务必执行
nginx -t校验语法,再nginx -s reload
主 location 使用 try_files 而非 if 判断
旧式 if (!-e $request_filename) 写法在 Windows 和部分 Nginx 版本下会导致 PATH_INFO 为空,TP8 默认依赖它解析路由,一空就静默失败。
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 推荐规则(放在
location / { }块内):try_files $uri $uri/ /index.php?$query_string; - 该规则优先尝试静态文件和目录,未命中则交由
public/index.php处理 - 不要嵌套在 if 或其他逻辑里,也不要用
&实体,必须是真实 & 符号
PHP 处理块必须配齐三行 fastcgi_param
即使请求成功转到 index.php,若 PHP 找不到入口文件,Nginx 错误日志会报 Primary script unknown。
- 在
location ~ \.php$ { }块中,确保包含: fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;fastcgi_param PATH_INFO $fastcgi_path_info;fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;- 建议加上:
fastcgi_split_path_info ^(.+\.php)(/.+)$;(提升 PATH_INFO 兼容性) - 别用
$request_filename替代$realpath_root$fastcgi_script_name,尤其在 Windows 下易因大小写失效
框架层确认路由已启用
服务器配置只是第一步,框架内部也要“接得住”伪静态请求。
- 检查
config/app.php中:'url_route_on' => true, - 确保
'pathinfo_depr' => '/'(默认值,保持即可) - 不要开启
APP_DEBUG上线环境,也务必删除.env文件 - 宝塔用户可直接在【网站设置 → 伪静态】中选择“thinkphp”,它已内置适配 TP8 的规则
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










