thinkphp6伪静态配置成功的关键是服务器规则、运行目录、php环境三者严格对齐:nginx规则须手动添加在location ~ .php$前,指向/public/index.php并用last;运行目录必须设为/public;php需放开putenv、ini_set、scandir且透传path_info;多应用需两段正则捕获应用前缀。

一、Nginx 规则要写对位置和内容
宝塔面板里不能直接选“ThinkPHP”模板(那是给 TP5 用的),必须手动配置:
- 进「网站 → 配置文件」,在
server { }块内、location ~ \.php$ { }之前 插入以下规则:
location / {
if(!-e $request_filename) {
rewrite ^(.*)$ /public/index.php?s=$1 last;
}
}
-
/public/index.php是硬性要求:TP6 入口强制在public/目录下 -
last不可替换为break或redirect:只有last会让重写后重新进入 location 匹配流程,请求才能真正交给 PHP 处理 - 规则必须放在
location ~ \.php$前面,否则 PHP 文件匹配优先级更高,if根本不执行
二、运行目录必须设为 /public
这是最容易忽略却最致命的一环:
- 进「网站 → 设置 → 网站目录 → 运行目录」,从下拉菜单中选择
/public(不是手动输入,不是留空,也不是/) - 改完立刻点「保存」,再点右上角「重载 Nginx」——只保存不重载,旧进程仍在跑
- 验证方式:访问
/index.php应该返回 404;访问/public/index.php能打开首页,或直接访问域名能正常加载
三、PHP 环境必须放开关键函数并透传 PATH_INFO
TP6 启动时依赖 putenv 和 ini_set 动态设置环境,还要靠 PATH_INFO 解析路由:
- 进「软件商店 → 找到当前 PHP 版本 → 设置 → 配置修改」,搜索
disable_functions,删掉其中的putenv、ini_set、scandir - 检查站点配置中
location ~ \.php$ { }块内是否有这行:fastcgi_param PATH_INFO $fastcgi_path_info;(宝塔默认有,但升级 PHP 后可能被重置) - 确保该块中还有:
fastcgi_split_path_info ^(.+\.php)(/.+)$;
四、多应用需单独捕获应用前缀
如果你用了 admin、api 等多应用模式,基础规则会失效:
- 把上面的
location /块替换成:
if(!-e $request_filename) {
rewrite ^/([a-z0-9A-Z_\-]+)/(.*)$ /index.php?s=$1/$2 last;
rewrite ^/(.*)$ /index.php?s=$1 last;
}
- 第一行提取路径首段(如
/admin/login→s=admin/login),供框架识别应用名 - 第二行兜底处理根路径、静态资源等(如
/static/css/app.css) - 正则中的字符集
[a-z0-9A-Z_\-]要覆盖你实际的应用命名,比如含下划线或短横就得保留
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











