thinkphp 6 在宝塔面板出现404,主因是运行目录未设为/public、path_info未透传或未重载nginx;需将运行目录设为/public,手动配置含last的if重写规则并置于location ~ .php$之前,同时放开scandir/putenv/ini_set函数并执行nginx -t && service nginx reload。

ThinkPHP 6 在宝塔面板配伪静态,90% 的 404 不是规则写错,而是运行目录、PATH_INFO 支持、重载动作三者中至少漏掉一个。
运行目录必须设为 /public
TP6 的入口强制在 public/index.php,但宝塔新建站点默认把网站根目录指向项目顶层(比如 /www/wwwroot/myapp),这会导致 Nginx 去错地方找 index.php,所有路由直接 404。
- 进宝塔 → 网站 → 找到你的站点 → 设置 → 网站目录 → 运行目录,选
/public(注意开头有斜杠) - 改完立刻点「保存」,再点「重载 Apache/Nginx」——只保存不重载,旧进程还在用老路径
- 验证:访问
/index.php应该 404;访问/public/index.php能打开(或直接访问域名能进首页)
伪静态规则别选模板,手动粘贴 if + last 块
宝塔下拉菜单里的「ThinkPHP」模板默认适配 TP5,对 TP6 的 PATH_INFO 解析支持不全,首页能开、点菜单就 404 是典型表现。
- 进宝塔 → 网站 → 设置 → 伪静态 → 清空内容,粘贴以下完整块(不是单行):
location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } }- 这条规则必须放在
location ~ \.php$块之前,否则 PHP 文件匹配优先级更高,rewrite根本不触发 -
last不可换成break或redirect:只有last会让重写后重新进入 location 匹配流程,确保请求真正落到index.php
PHP 层必须放开 scandir、putenv 和 ini_set
TP6 启动时要扫描 app/、config/ 目录,还要动态设置 PATH_INFO,禁用其中任一函数都会导致白屏或报 URL pathinfo not supported。
- 进宝塔 → 软件商店 → 找到你用的 PHP 版本 → 设置 → 配置修改 → 搜索
disable_functions - 删掉其中的
scandir、putenv、ini_set(保留exec、system等仍安全) - 检查 PHP-FPM 配置里
fastcgi_param PATH_INFO $fastcgi_path_info;是否被注释(宝塔默认有,但升级 PHP 后可能重置)
改完必须执行 nginx -t && service nginx reload
宝塔界面上点「重载」有时会失败或部分生效,尤其当配置语法有隐性问题时,界面不报错但实际没加载新规则。
- SSH 登录服务器,执行:
nginx -t—— 确认语法无误 - 再执行:
service nginx reload—— 强制重载,绕过宝塔 UI 缓存 - 顺手 curl 一下:
curl -I http://yourdomain.com/user/list,看返回是 200 还是 Nginx 层的 404,能快速定位是 Web 服务层还是 PHP 层的问题
最常被跳过的其实是运行目录和 PHP 函数放开这两步——很多人反复调规则,却没意识到请求压根没进 public/index.php,更别说框架解析了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











