ThinkPHP 8.x 在宝塔需设运行目录为 /public、手动配置伪静态规则 if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } 并确保 PHP 支持 PATH_INFO。

ThinkPHP 8.x 在宝塔面板设伪静态,关键不是“选模板”,而是“对齐入口路径 + PATH_INFO 透传 + last 跳转”。宝塔内置的「ThinkPHP」模板是为 TP5 设计的,直接选用会导致首页能开、点链接全 404,因为 TP8 默认入口在 /public/index.php,且依赖原始 URL 路径解析路由(非 $_GET['s'])。
运行目录必须设为 /public
这是前提,否则所有静态资源和路由都会错乱:
- 进宝塔 → 网站 → 找到你的站点 → 设置 → 网站目录
- 将「运行目录」改为
/public(注意开头斜杠) - 勾选「重载 Nginx 配置」→ 保存
伪静态规则要手动粘贴(不能用内置模板)
在「网站设置 → 伪静态」中,清空原有内容,粘贴以下标准规则:
if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; }
立即学习“PHP免费学习笔记(深入)”;
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
说明:
- 这里写
/index.php是因为运行目录已是/public,Nginx 当前上下文就是该目录 - 必须用
last,不可用break或redirect;只有last才会触发重新匹配 location,让请求真正进入 PHP 处理块 - 该规则本质是:所有非真实文件请求,都转发给
index.php并把原始路径作为s=xxx参数传入,TP8 的路由层才能正确识别
确认 PHP 支持 PATH_INFO(常被忽略)
即使规则和目录都对,仍可能报「URL pathinfo not supported」。需检查:
- 宝塔 → 网站 → 设置 → 配置文件 → 找到
location ~ \.php($|/)块 - 确保其中有这行:
fastcgi_param PATH_INFO $fastcgi_path_info; - 同时检查 PHP 设置 → 禁用函数列表 → 确保
putenv和ini_set没被勾选(TP8 启动时需动态设环境)
多应用模式需额外适配
如果你用了 admin/api 等多应用(如访问 /admin/login),单条规则不够,要换成两段式:
if(!-e $request_filename) {
rewrite ^/([a-z0-9A-Z_\-]+)/(.*)$ /index.php?s=$1/$2 last;
rewrite ^/(.*)$ /index.php?s=$1 last;
}
第一行捕获应用名(如 admin),拼进 s 参数;第二行兜底处理根路径或静态资源。正则中的字符集可根据实际应用名扩展,比如含中文就加 \u4e00-\u9fa5。


















