thinkphp项目在宝塔跑不起来主因是根目录未设为public、伪静态规则不适配tp6、scandir被禁用及runtime权限不足;须将网站根目录改为/public,替换为tp6专用nginx伪静态规则,删除php disable_functions中的scandir,并修复runtime目录属组为www:www。

ThinkPHP 项目在宝塔面板上跑不起来,八成是伪静态没配对,或者入口文件路径被宝塔默认规则拦了。
ThinkPHP 6 的 public 目录必须设为网站根目录
宝塔新建站点时默认把根目录指向项目顶层(比如 /www/wwwroot/myapp),但 ThinkPHP 6 要求 Web 可访问的唯一入口是 public 子目录。直接放顶层会导致 index.php 暴露、配置文件可读、路由失效。
- 进宝塔 → 网站 → 找到你的站点 → “根目录” 改成
/www/wwwroot/myapp/public - 改完立刻重启 PHP 和 Nginx/Apache,否则旧配置仍生效
- 如果用的是 ThinkPHP 5.x,也建议同样指向
public,虽然它兼容根目录运行,但安全性和 URL 一致性差很多
Nginx 下必须启用 ThinkPHP 专用伪静态规则
宝塔自带的 ThinkPHP 伪静态模板(尤其是老版本)默认适配 TP5,对 TP6 的 index.php 路由支持不完整,常见现象是首页能打开,点菜单就 404。
- 进宝塔 → 网站 → 设置 → 伪静态 → 选“ThinkPHP”,但别直接保存
- 把默认内容替换成 TP6 官方推荐规则(Nginx):
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
- 注意:不能用
try_files写法(如try_files $uri $uri/ /index.php?s=$uri&$args),TP6 的PATH_INFO解析会出错 - Apache 用户不用管这个,宝塔自动写好
.htaccess,但得确认AllowOverride All在虚拟主机配置里已开启
宝塔 PHP 设置里要关掉 disable_functions 中的 scandir
ThinkPHP 6 的容器和配置加载机制依赖 scandir() 扫描目录,宝塔默认 PHP 配置常禁用它,导致启动时报 Call to undefined function think\scandir() 或直接白屏。
- 进宝塔 → 软件商店 → 找到你用的 PHP 版本 → 设置 → 配置修改
- 搜索
disable_functions,删掉其中的scandir(保留其他如exec,passthru等仍是安全的) - 改完重启 PHP 进程,不是重载,是彻底重启
- 顺手检查
date.timezone是否设为Asia/Shanghai,不然日志时间全错
最麻烦的其实是路径权限和用户组——宝塔用 www 用户跑服务,但上传的项目文件可能是 root 或其他用户创建的,runtime 目录写不进去,错误不报在页面上,只藏在 logs/thinkphp.log 里。动手前先 chown -R www:www /www/wwwroot/myapp/runtime,比反复调伪静态有用得多。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











