thinkphp项目部署到宝塔面板需确保三点:使用php 8.1/8.2版本并启用fileinfo、mbstring、pdo_mysql等扩展;网站根目录设为/public;伪静态规则须用tp6专用写法location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } }。

ThinkPHP项目部署到宝塔面板,核心就三件事:装对PHP版本、根目录必须指向public、伪静态规则得用TP6专用写法。只要这三点做准,基本不会卡在404、白屏或ParseError上。
装对PHP版本并启用必要扩展
ThinkPHP 6.0+ 要求 PHP ≥ 7.3,推荐用 PHP 8.1 或 8.2(别选8.0,已停止安全更新;也别用8.3+,有兼容问题)。光装PHP还不够,以下扩展缺一不可:
- fileinfo(读取文件类型,框架自动检测必需)
- mbstring(中文处理、编码转换)
- pdo_mysql(数据库驱动,连MySQL必须)
- openssl和curl(HTTPS请求、微信/支付SDK依赖)
- ctype和json(基础类型判断与数据交换)
操作路径:宝塔【软件商店】→ 找到对应PHP版本 → 【设置】→ 【安装扩展】→ 全部勾选 → 【安装】→ 安装完务必点【重启】服务(只重载不生效)。
网站根目录必须设为 /public
ThinkPHP 6强制入口统一在public/下,index.php放这里,静态资源(css/js)也从这里出。如果网站根目录还设在项目顶层(比如/www/wwwroot/myapp),就会直接暴露app/、config/等敏感目录,而且所有路由都404。
正确做法:
- 添加站点时,根目录填项目完整路径(如
/www/wwwroot/myapp) - 上传解压后,确认里面有
public/、app/、runtime/等标准结构 - 进该站点【设置】→【网站目录】→ 将【运行目录】改为
/public - 勾选【重载Nginx配置】→ 【保存】→ 返回再点一次【重启Nginx】(光保存不重启,配置不生效)
配对伪静态规则,别套默认模板
宝塔自带的“ThinkPHP”伪静态是为TP5设计的,直接套在TP6上会导致首页能打开、点链接全404——因为PATH_INFO解析失败。必须手动清空原有内容,粘贴TP6兼容规则:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
注意:
• 不要用try_files $uri $uri/ /index.php?$query_string写法,TP6不认这个;
• 多应用模式(如/admin/login)需额外开启app_multi并换更严格规则;
• 改完伪静态,同样要【重载】并【重启Nginx】才生效。
上线前最后检查项
项目能跑通≠可上线,这几处漏掉容易引发安全风险或功能异常:
-
.env文件删掉或改权限:线上环境必须删除
.env,或至少设为644且不能被Web直接访问 -
关闭调试模式:确保
APP_DEBUG = false,否则数据库密码、路径、SQL语句全暴露 -
runtime目录可写:执行
chown -R www:www /www/wwwroot/myapp/runtime,或在宝塔【文件】中右键设755/777(仅runtime子目录) -
时区校准:PHP设置里确认
date.timezone = Asia/Shanghai,避免日志时间错乱
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











