thinkphp 6 在宝塔面板伪静态失效,主因是运行目录未设为 /public、scandir 被禁用或 nginx 规则未正确触发 index.php;须改运行目录、粘贴 if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } 规则、启用 scandir 和 path_info 支持。

ThinkPHP 6 在宝塔面板上伪静态配不起来,八成不是规则写错了,而是 public 目录没设对、scandir 被禁了,或者 Nginx 重写根本没进 index.php。多语言不起作用,大概率是语言包路径名大小写不对、没放对位置,或 Lang::setLang() 调得太晚。
ThinkPHP 6 的 public 目录必须设为网站运行目录
宝塔新建站点时默认根目录指向项目顶层(比如 /www/wwwroot/myapp),但 TP6 只允许 public 子目录被 Web 访问。否则:index.php 暴露、config/ 可直读、路由全失效。
- 进宝塔 → 网站 → 找到你的站点 → 设置 → 网站目录 → 运行目录 改成
/public - 改完立刻点「重载 Apache/Nginx」,不是「保存」就完事——旧进程还在用老路径
- TP5 虽能跑在顶层,但安全性和 URL 一致性差,也建议统一指向
/public
Nginx 伪静态必须用 TP6 官方 if + last 规则
宝塔自带的「ThinkPHP」伪静态模板默认适配 TP5,对 TP6 的 PATH_INFO 解析支持不全,首页能开、点菜单就 404 是典型表现。
- 进宝塔 → 网站 → 设置 → 伪静态 → 清空内容,粘贴以下规则:
location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } }- 别用
try_files写法(如try_files $uri $uri/ /index.php?$query_string),TP6 的$_SERVER['PATH_INFO']会拿不到原始路径,报URL pathinfo not supported -
last是关键:它让重写后重新匹配 location,确保请求真正进到 PHP;用break或redirect都会失败 - 规则必须放在
location ~ \.php$块之前,否则 PHP 文件匹配优先级更高,rewrite 不触发
PHP 配置里 scandir 和 PATH_INFO 相关项不能禁用
TP6 启动时要扫描 app/、config/ 等目录加载配置和类,依赖 scandir();同时路由解析靠 PATH_INFO,相关函数和参数一旦被拦,直接白屏或报错。
- 进宝塔 → 软件商店 → 找到你用的 PHP 版本 → 设置 → 配置修改 → 搜索
disable_functions - 删掉其中的
scandir(保留exec、system等仍是安全的) - 确认
putenv和ini_set没被禁用——TP6 启动时需动态设置PATH_INFO - 检查 PHP-FPM 配置中
fastcgi_param PATH_INFO $fastcgi_path_info;这行是否被注释(宝塔默认有,但升级 PHP 后可能重置)
多语言文件路径、命名和加载时机必须严格匹配
TP6 多语言不是靠配置开关自动生效的,路径错一位、大小写差一个字母、Lang::setLang() 放错地方,翻译就静默失效——还不报错,只返回原 key。
- 语言包必须放在
lang/目录下,子目录名用小写短横线格式,如lang/zh-cn/、lang/en-us/;zh_CN或ZH-CN都会被忽略 - 每个子目录里放
common.php(或其他分组名,如user.php),且必须return ['hello' => '你好'];,不能是 JSON/YAML,也不能放在config/lang.php -
Lang::setLang()必须在任何lang()调用前执行,最佳位置是中间件(如app\common\middleware\Lang.php);控制器构造函数里设是无效的 - 调试时可在
public/index.php开头加$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'];强制兜底,但上线前必须删掉
最常被跳过的其实是权限和日志——runtime/ 目录属主不是 www,写不进去,错误不会打在页面上,只藏在 runtime/log/thinkphp.log 或 Nginx 错误日志里。配完先看日志,比反复刷页面有用得多。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











