ThinkPHP5域名绑定后空白主因是请求未抵达index.php,需先验证重写规则:Apache检查.htaccess及AllowOverride,Nginx确认try_files含$query_string;再排查路由加载、url_route_on开启、控制器return缺失及runtime缓存问题。

入口文件没被 Web 服务器正确路由到
ThinkPHP5 域名绑定后返回空白,最常卡在第一步:请求压根没进 index.php。比如访问 https://example.com/user/list 是白屏,但加 /index.php 就能打开(https://example.com/index.php/user/list),说明重写规则失效。
Apache 下检查 .htaccess 是否启用且内容正确:RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L];同时确认 AllowOverride FileInfo 已在虚拟主机配置中开启。
Nginx 下必须在 location / 块里写全这行:try_files $uri $uri/ /index.php?$query_string;。漏掉 $query_string 会导致 $_GET 为空,后续路由匹配失败,控制器可能因参数缺失而静默退出,最终响应为空。
子目录部署(如域名指向 /myapp/)时,Nginx 的 location 要带前缀,且 APP_URL 或 url_domain 配置需同步补上前缀,否则 url() 生成的链接错位,跳转后又触发一次无效重写。
路由未加载或命名不匹配
请求进了 index.php,但 url('user/list') 返回空或跳转 404,大概率是路由根本没注册成功。
运行 php think route:list,如果输出为空或不含目标路由,说明 route/app.php 没执行——在该文件第一行加 die('route loaded'); 测试,不中断就代表被跳过。
检查点包括:
-
route/app.php必须以return [...];结尾,缺分号、括号不匹配、用了中文标点都会导致静默失败 -
config/app.php中'url_route_on' => true被.env覆盖(如APP_URL_ROUTE_ON=false),注意.env值含空格或#必须用双引号包裹 - 用了注解路由但没跑
php think optimize:route,或控制器类没加@Route注解
控制器方法没 return 数据
ThinkPHP5 默认不会自动输出视图,控制器方法必须显式 return。只写 $this->success()、echo、print_r() 或空 return;,都会导致响应体为空。
正确写法只有两类:
- 直接返回数组或字符串:
return ['code' => 0, 'data' => []];或return 'ok'; - 用内置封装:
return json(['msg' => 'success']);或return view('index');
特别注意:若用了自定义中间件做权限校验,中间件里写了 return false; 或没写 return $next($request);,请求流会在这里终止,控制器根本不会执行,页面必然空白。
runtime 缓存残留或权限异常
迁移服务器、切换环境、升级框架后出现空白页,90% 是 runtime/ 目录惹的祸。它缓存了旧路径、旧类映射、旧路由规则,新环境下读取失败却无报错,直接返回空响应。
删掉整个 runtime/ 目录(不是清空,是删除文件夹本身),再访问一次,框架会重建。Linux 下还要确认 Web 进程用户(如 www-data)对 runtime/ 有写权限:chmod -R 755 runtime。
另外,vendor/autoload.php 加载失败也会导致白屏(连错误都不抛),可在 public/index.php 开头加一行:die(file_exists(__DIR__.'/../vendor/autoload.php') ? 'autoload OK' : 'autoload missing'); 快速验证。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











