ThinkPHP6 上线部署:宝塔 + Nginx 伪静态 + 定时任务的完整踩坑

先给结论:ThinkPHP6 上线最常见的三个坑——访问 404(伪静态没配)、500(.env/权限)、定时任务不跑(计划任务命令写错)。只要把「宝塔建站目录指向 public、Nginx 加 ThinkPHP 伪静态、.env 填对数据库、宝塔计划任务用 php 绝对路径调 think 命令」这四步做对,部署就稳了。本文给可直接抄的配置。

一、宝塔建站:目录一定要指向 public

  • 网站根目录填 /www/wwwroot/你的项目/public,不是项目根目录。指向根目录会暴露源码、且入口不对。
  • 运行目录同样选 public,并关闭「防跨站(open_basedir)」若它导致 vendor 读不到(按需)。
  • PHP 版本选 7.3+(ThinkPHP6 要求 7.1+,建议 7.4/8.x 视扩展而定)。

二、Nginx 伪静态(隐藏 index.php)

宝塔站点 → 伪静态,贴以下规则(ThinkPHP6 官方规则):

location / {
    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php?s=/$1 last;
        break;
    }
}

配好后,/article/xxx.html 这类路由才能生效,否则全是 404。如果你的路由用的是 pathinfo 形式,确认宝塔 PHP 已开启 pathinfo。

三、.env 与数据库

  1. 把 .example.env 复制为 .env,填好 DATABASE 的 hostname/user/password/database。
  2. 生产数据库用户、密码与本地不同,千万别直接把本地 .env 传上去当生产用。
  3. 确认 APP_DEBUG=false(生产开 debug 会暴露错误栈,且慢)。

四、定时任务(宝塔计划任务跑 ThinkPHP 命令)

想跑 ThinkPHP 的 php think xxx 命令(如统计、推送),在宝塔 → 计划任务 → Shell 脚本:

# 用 php 绝对路径 + 项目根目录的 think 入口
/www/server/php/74/bin/php /www/wwwroot/你的项目/think 统计命令名

三个易错点:必须用 php 绝对路径(计划任务环境没有 PATH)、命令在项目根目录执行(think 文件在项目根)、写绝对日志路径方便排错。

五、五个常见坑

坑原因规避
全站 404伪静态没配 / 根目录没指 public加上方 Nginx 规则;根目录指向 public
500 错误页.env 没填 / runtime 无写权限填对数据库;给 runtime 写权限
静态资源 404public 下资源被伪静态吞伪静态排除静态文件(上面规则已 !-e 处理)
计划任务不执行用相对 php / 相对路径php 与 think 都用绝对路径
验证码/上传失败runtime 或 upload 目录无写权限给 runtime、public/uploads 写权限

六、FAQ

Q:宝塔和本地 phpStudy 配置能一模一样吗? 思路一样,但 PHP 版本路径、数据库账号不同,.env 必须按生产填,别直接覆盖。

Q:伪静态加了还是 404? 清 Nginx 缓存 / 重载配置;确认根目录确实指向 public,且路由大小写与定义一致。

Q:定时任务的输出去哪看? 计划任务里把输出重定向到日志文件(绝对路径),执行后去那个文件看报错。

小结

ThinkPHP6 上线就四步:根目录指 public → 加伪静态 → .env 填生产数据库(关 debug)→ 计划任务用 php 绝对路径调 think 命令。绝大多数 404/500/任务不跑都出在这四步里。部署完记得把 runtime 和各上传目录权限给对,再清一次缓存。具体规则以 ThinkPHP6 官方部署文档与宝塔当前版本为准。

相关推荐

相关推荐

评论(0)
发表评论