宝塔7.8需三步适配ThinkPHP6/8:运行目录设为/public、PHP禁用函数删putenv和ini_set、Nginx启用PATH_INFO透传,并替换伪静态规则为含两条rewrite的完整配置,最后重载Nginx生效。

宝塔7.8自带的“ThinkPHP”伪静态模板是为TP5设计的,直接套用在TP6/TP8上必然出问题:首页能打开,点链接就404,或URL里始终带index.php。这不是模板“不完整”,而是它根本没适配TP6/8的入口结构和路由机制——必须手动替换为完整、对齐的规则。
核心三处必须同步改
只换伪静态规则,其他地方不动,照样失败。以下三项缺一不可:
-
运行目录设为
/public:宝塔 → 网站 → 设置 → 网站目录 → 运行目录 → 下拉选择/public(不是手动输,也不能留空) -
PHP禁用函数中删掉
putenv和ini_set:进宝塔 → 软件商店 → 找到你用的PHP版本 → 设置 → 配置修改 → 搜索disable_functions→ 删除这两项(TP6/8启动时必须调用) -
Nginx配置中启用
PATH_INFO透传:确保PHP处理块里有这行:fastcgi_param PATH_INFO $fastcgi_path_info;(宝塔默认一般有,但升级PHP后可能被重置)
伪静态栏粘贴完整规则(覆盖原有内容)
进宝塔 → 网站 → 设置 → 伪静态 → 清空所有内容,粘贴以下规则(注意:是纯文本,不带任何注释或空行):
if (!-e $request_filename) {
rewrite ^/([a-z0-9A-Z_\-]+)/(.*)$ /public/index.php?s=$1/$2 last;
rewrite ^/(.*)$ /public/index.php?s=$1 last;
}
说明:
立即学习“PHP免费学习笔记(深入)”;
- 第一行匹配带应用前缀的请求,如
/admin/login→ 提取admin和login,拼成s=admin/login,避免多应用下模块名丢失 - 第二行兜底,让
/、/robots.txt、/api/v1等无前缀路径也能进入口,由框架自己判断 -
last不能换成break或redirect:只有last会重新进入location匹配流程,保证/public/index.php被正确加载并保留查询参数
改完必须重载Nginx(不能只点保存)
宝塔界面点“保存”只是写入配置,不等于生效。务必执行:
- SSH登录服务器,运行:
nginx -t(检查语法是否正确) - 若提示
successful,再运行:service nginx reload(强制重载,绕过面板缓存) - 顺手验证:
curl -I http://yourdomain.com/admin/login,看返回是不是200或302,而不是Nginx层的404
验证是否真生效
别只看首页,重点测三类地址:
-
https://yoursite.com/index.php/admin/login→ 应能正常打开(说明框架本身没问题) -
https://yoursite.com/admin/login→ 应同样打开,且浏览器地址栏不跳回带index.php的链接 -
https://yoursite.com/→ 应进默认应用首页,而不是报错或进错应用
如果第二项失败,大概率是伪静态规则没生效或PATH_INFO没透传;如果第三项进错应用,重点查default_app配置和域名绑定逻辑。



















