必须同步满足三项:nginx用try_files正确转发请求至index.php、运行目录设为public/、框架配置url_route_on=true/pathinfo_depr='/'/url_html_suffix='',缺一则404或白屏。

ThinkPHP在Nginx下配置伪静态,不能只贴一条rewrite规则就完事。必须同时满足三件事:Nginx正确转发请求到index.php、项目运行目录指向public/、框架内部路由和PATH_INFO解析机制启用且匹配。缺一不可,否则不是404就是白屏。
Nginx配置:用try_files代替if判断(推荐)
旧教程常用的if (!-e $request_filename)写法在Windows或高版本Nginx中易导致PATH_INFO为空,引发ThinkPHP 6/8静默失败。更稳妥的做法是用try_files:
- 编辑站点配置文件(如
vhosts.conf),在server块内找到location / { } - 将其替换为:
location / { try_files $uri $uri/ /index.php?$query_string; } - 确保这段配置位于
location ~ \.php$之前 - 若部署在子目录(如
/myapp/),则fallback路径改为/myapp/index.php?$query_string
运行目录必须设为/public
ThinkPHP 6+强制要求Web可访问根路径为public/目录,否则vendor/autoload.php加载失败,页面直接空白且无报错。
- 在小皮面板(phpStudy)或宝塔中,进入网站「设置 → 网站目录」,将「运行目录」明确选为
/public - 对应Nginx配置中的
root指令必须指向物理public路径,例如:root "D:/www/myapp/public"; - 验证方式:访问
http://域名/config/app.php应返回404;访问http://域名/index.php能正常打开首页
ThinkPHP框架配置要同步开启
服务器转发过去后,框架自己不认路由,照样404。需检查config/app.php中三项:
-
'url_route_on' => true—— 路由开关必须打开 -
'pathinfo_depr' => '/'—— 必须是斜杠,与Nginx规则中s=$1的分隔逻辑一致 -
'url_html_suffix' => ''—— 设为空字符串,才能支持/user/list这类无后缀URL
验证顺序与常见错误定位
别一改完就刷页面,按这个顺序查:
- 先测
http://域名/index.php/index/hello——能显示说明PHP和框架本身没问题 - 再测
http://域名/index/hello——404就查Nginx是否重载、root是否对、try_files是否生效 - 若页面空白(200但无内容),立即看Nginx错误日志(如
c:\phpstudy_pro\extensions\nginx1.22.1\logs\error.log) - 搜
Primary script unknown→ root路径错;搜FastCGI sent in stderr→ PATH_INFO未透传或scandir被禁用
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











