ThinkPHP部署后页面空白主因是PHP错误被屏蔽、Web根目录未设为public、runtime目录不可写及伪静态规则失效;需开启display_errors、将根目录指向public、仅赋予runtime写权限、替换if重写为try_files规则。

ThinkPHP部署后页面空白,不是代码出问题,而是环境配置没对上——错误被屏蔽、入口目录错位、runtime不可写、伪静态失效,这四点覆盖了绝大多数情况。
让报错直接显示出来
白屏往往是因为PHP错误被静默吞掉。光改APP_DEBUG = true不够,得让PHP本身把错误打到页面上:
- 打开php.ini或宝塔中对应站点的PHP配置文件,把display_errors = Off改成On
- 确认error_reporting = E_ALL(不能是带& ~E_NOTICE这类过滤的写法)
- 保存后必须重启PHP服务,只重载配置不生效
- 实在找不到配置位置,临时在public/index.php最开头加两行:
error_reporting(E_ALL);
ini_set('display_errors', '1');(上线前务必删掉)
根目录必须指向public子目录
ThinkPHP 6+ 强制要求Web服务器的DocumentRoot落在public/下,设错会导致自动加载失败,直接Fatal error: Class 'think\App' not found且不报错:
- 宝塔用户:网站 → 设置 → 根目录 → 改为/www/wwwroot/your-site/public
- Nginx手动配置:检查server块里的root指令,必须是root /path/to/your-project/public;
- 确认public/index.php真实存在,权限至少是644
- 别用php think run测试——它走CLI模式,和Web环境完全隔离
runtime目录要可写,但只限它自己
框架运行时生成日志、缓存、模板编译文件全靠runtime/目录。给整个项目递归755不仅无效,还可能引发安全警告:
立即学习“PHP免费学习笔记(深入)”;
- 只对runtime及其子目录赋权:chmod -R 775 runtime
- 确保属主与PHP进程用户一致:宝塔默认是www,执行chown -R www:www runtime
- 检查runtime/log/下是否有按日期命名的日志文件,没有说明不可写或日志类型被设成test
- 刚部署建议先删掉整个runtime目录,让框架重新生成干净缓存
Nginx伪静态别用if,改用try_files
老式if (!-e $request_filename) { rewrite ... }写法在部分Nginx版本和Windows下极易导致$_SERVER['PATH_INFO']为空,ThinkPHP 8.0依赖它解析路由,一空就静默失败:
- 删除所有if重写块
- 在location / { }里写标准规则:
try_files $uri $uri/ /index.php?$query_string; - 漏掉$uri/会导致带斜杠路径(如/admin/)直接404
- 快速验证:访问/index.php/index/user能通,但/index/user空白,基本就是伪静态没生效



















