ThinkPHP打不开主因是环境与配置问题:需确认PHP版本(TP8≥8.1、TP6≥7.2.5)及mbstring、openssl、pdo、curl、intl扩展齐全;宝塔部署必须将“运行目录”设为/public;访问/public/index.php响应头含X-Powered-By: ThinkPHP才表明PHP已正确接管请求。
ThinkPHP搭建完打不开,不是代码写错了,而是请求根本没进框架——90%的问题卡在环境和配置上,而不是路由或控制器。
先确认 PHP 环境和扩展是否到位
终端执行:
php -v —— TP8 要求 ≥8.1,TP6 要求 ≥7.2.5;
php -m | grep -E 'mbstring|openssl|pdo|curl|intl' —— 缺任何一个,public/index.php 就会空白或 500,且不报错。
常见坑点:
• Windows 用户慎用 XAMPP 自带旧版 PHP,PDO 常被默认禁用;
• Mac 上 Homebrew 安装的 PHP,openssl 扩展容易漏装;
• 宝塔用户请进「软件商店 → PHP → 设置 → 安装扩展」手动勾选缺失项。
检查网站根目录和运行目录是否设对
ThinkPHP 6+ 强制要求入口统一收敛到 /public 子目录。宝塔部署时极易踩坑:
- 进「网站 → 设置 → 网站目录」→「运行目录」必须下拉选择 /public(不是手动输入)
- 改完一定要点「保存」再点「重启站点」,否则不生效
- 别把整个项目根目录(含 app/、vendor/、public/)设为网站根,否则框架核心文件暴露,安全风险高
验证请求有没有真正交给 PHP 处理
浏览器访问 http://你的域名/public/index.php,如果空白或 500:
- 用 curl -I http://你的域名/public/index.php 查响应头:有 X-Powered-By: ThinkPHP 表示 PHP 已运行;只有 Server: nginx/Apache 则说明 Web 服务器根本没转给 PHP
- Apache 用户:确认 public/.htaccess 存在,且虚拟主机配置中 AllowOverride All 已开启
- Nginx 用户:server 块里必须有 try_files $uri $uri/ /index.php?$query_string; —— 漏掉
$query_string 会导致 GET 参数丢失,后续路由匹配全失效
快速判断是重写问题还是路由本身没加载
绕过伪静态,直接测试入口是否通:
立即学习“PHP免费学习笔记(深入)”;
- 访问 http://你的域名/index.php/index/index(TP6/TP8 默认首页路由)
- 能打开 → 说明框架跑起来了,问题是服务器重写规则没配好
- 打不开 → 运行 php think route:list,看输出里有没有目标路由;若为空或报错,说明 route/route.php 没被加载,或文件里只写了注释、return []
- 同时检查 config/app.php 中 'url_route_on' => true 是否开启,'app_debug' => true 是否启用以便看到详细提示