ThinkPHP6.0 去除 index.php 需三者对齐:服务器伪静态规则(选“ThinkPHP 6”模板)、运行目录设为 /public、PHP 开放 putenv/ini_set 并配置 fastcgi_param PATH_INFO。

ThinkPHP6.0 要实现不带 index.php 的访问,核心不是只加一条重写规则,而是服务器转发路径、框架入口位置、PHP 运行环境三者必须严格对齐。任一环节出错,就会全站 404 或提示 “URL pathinfo not supported”。
宝塔面板推荐操作(最省事)
新版宝塔已内置适配 TP6 的伪静态模板:
- 进入「网站 → 设置 → 伪静态」,下拉选择ThinkPHP 6(注意:不是“ThinkPHP”,那是给 TP5 用的)
- 点击「保存」,宝塔会自动重载 Nginx(若未自动重载,请手动点右上角「重载 Nginx」)
- 该模板默认生成规则:
if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } - 但此规则仅适用于入口在根目录的部署;TP6 默认入口在
/public/index.php,所以你必须同步完成下一步
运行目录必须设为 /public
这是最容易忽略却最致命的一环:
- 进入「网站 → 设置 → 网站目录 → 运行目录」
- 从下拉菜单中选择
/public(不能留空、不能填/、不能手动输入) - 点「保存」后,务必点击右上角「重载 Nginx」——只保存不重载,配置不会生效
- 验证方式:访问
https://yourdomain.com/index/test(不带 index.php)能正常响应,即成功
PHP 环境需放开关键函数并透传 PATH_INFO
TP6 启动时依赖 putenv 和 ini_set 设置环境,靠 PATH_INFO 解析路由:
立即学习“PHP免费学习笔记(深入)”;
- 进「软件商店 → 找到当前 PHP 版本 → 设置 → 配置修改」
- 搜索
disable_functions,删掉其中的putenv、ini_set、scandir - 打开站点配置文件(网站 → 配置文件),在
location ~ \.php$ { }块内确认存在以下两行:
fastcgi_param PATH_INFO $fastcgi_path_info;
若缺失,请手动添加并保存后重载 Nginx。
多应用或子目录部署需额外处理
如果项目含多个应用(如 /admin、/api),不能直接套用单应用规则:
- 删除宝塔里已有的伪静态规则(包括“ThinkPHP 6”模板生成的)
- 手动粘贴以下两段式规则(放在
location ~ \.php$之前):
rewrite ^/([a-z0-9A-Z_\-]+)/(.*)$ /index.php?s=$1/$2 last;
rewrite ^/(.*)$ /index.php?s=$1 last;
}
注意:last 不可替换为 break 或 redirect;正则中的字符集可根据实际应用名扩展(如含中文需改用 ^/([^/]+)/(.*)$,但不推荐)。



















