thinkphp刚安装后public/index.php空白且/user/list 404,主因是php环境缺失扩展或web服务器未正确转发请求;需验证php版本与mbstring/openssl/pdo/curl扩展、确认入口目录配置、检查伪静态规则及路由文件加载状态。

刚装完ThinkPHP却打开public/index.php一片空白,访问/user/list直接404,不是代码写错了,而是框架根本没启动起来——90%的新手卡在这两步:入口文件没被PHP执行,或请求压根没进到路由系统里。
确认PHP环境和扩展是否就绪
先别急着改代码,终端里执行php -v,确保版本≥8.0(TP8)或≥7.2(TP6);再跑php -m | grep -E 'mbstring|openssl|pdo|curl',四行输出必须全有。缺任何一个,【public/index.php会直接500或空白,且不报错】。
Windows用户注意:别用XAMPP自带的旧版PHP,它默认禁用PDO;Mac用Homebrew装的PHP,常漏装openssl扩展,得手动brew install php@8.2-opcache再重装。
验证think命令能否在项目根目录运行
cd进入包含think、app/、public/、vendor/这四个东西的最外层目录——不是public,不是app,是整个项目文件夹。
执行php think build,TP8新装后这步不可跳过,否则app/目录为空,控制器根本不存在。
如果报Could not open input file think,说明你不在根目录;如果报Class "think\Console" not found,检查think文件首行:Linux/macOS必须保留#!/usr/bin/env php,Windows下必须删掉这一行,否则PHP解释器直接忽略后续内容。
排查public/index.php空白原因
浏览器访问http://localhost/your-project/public/index.php,空白或500,不是路由问题,是Web服务器没把请求交给PHP处理。
第一步:用curl确认是否进PHP层:curl -I http://localhost/your-project/public/index.php。如果响应头里有X-Powered-By: ThinkPHP,说明PHP已运行;如果没有,只看到Server: nginx或Server: Apache,问题出在Web服务器配置。
第二步:Apache用户检查public/.htaccess是否存在,且虚拟主机配置中AllowOverride All已开启;Nginx用户检查server块内是否有location / { try_files $uri $uri/ /index.php?$query_string; }——漏掉$query_string会导致GET参数丢失,后续路由匹配失败。
第三步:宝塔用户最容易踩坑——进【网站】→【设置】→【网站目录】→【运行目录】,必须选/public(开头带斜杠),改完点【保存】再【重启】站点,否则配置不生效。
解决路由404的核心操作
方法一:用命令行验证路由是否真被加载
执行php think route:list,如果列表为空或没有你写的/user/list,说明路由文件根本没执行。此时在route/app.php第一行加die('route loaded');,刷新页面看是否中断——不中断=该文件没被加载。
方法二:确认路由定义位置与模式匹配
TP6默认读route/app.php;TP8多应用模式下,app/route/app.php只对名为app的应用生效;若想全局生效,要么改用app/route.php,要么在public/index.php中调用App::useAppMulti(false)关掉多应用。
方法三:检查Web服务器伪静态是否生效
访问/user/list 404,但/index.php/user/list能通,就是伪静态没生效。Nginx必须用try_files $uri $uri/ /index.php?$query_string;,不能用过时的rewrite ^(.*)$ /index.php?s=$1 last;,TP6/TP8默认不认s=参数模式。
方法四:强制路由导致静态资源404
如果config/app.php中'url_route_must' => true已开启,所有请求(包括/static/logo.png)都会走路由匹配。此时需在route/app.php顶部加放行规则:Route::rule(':path^.*\.(js|css|png|jpg|gif|svg|woff2|ttf)$', 'static/:path', 'GET', ['ext' => '']);,【['ext' => '']这句不能少,否则/a.js会被自动补.html后缀匹配失败】。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











