thinkphp 5 在 nginx 下伪静态失败主因是三者未对齐:nginx 必须用 if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } 规则,root 指向项目根目录(非 public),且 fastcgi_param script_filename $realpath_root$fastcgi_script_name; 需完整;框架层须启用 url_route_on=true、pathinfo_depr='/'、url_html_suffix='';验证需先测 index.php/user/list 再测 /user/list。

ThinkPHP 5 在 Nginx 下伪静态失败,90% 是因为 Nginx 没把 /user/list 这类请求真正转发到 index.php,而是直接返回 404 或试图找物理文件。它不靠 .htaccess,必须改 Nginx 配置,且要和 TP5 的 s= 路由模式对齐。
location / 块必须用 if + rewrite,别信宝塔下拉菜单
宝塔、小皮面板里选“ThinkPHP”模板,塞的是 Laravel 风格的 try_files 规则,TP5 根本不认——它依赖 $_GET['s'] 解析路径,不是靠 PATH_INFO。你得手动进站点配置文件(如 vhosts.conf),找到 location / { } 块,**整段替换为**:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
注意三点:
-
last不能写成break,否则子目录路由参数会丢 - 这个
location /必须在location ~ \.php$块之前,否则重写不生效 - 确保
root指向项目根目录(不是public/),因为 TP5 入口是项目根下的index.php
PHP 处理块里 fastcgi_param 必须完整
Nginx 把请求转给 PHP-FPM 后,如果 SCRIPT_FILENAME 拼错,就会执行一个不存在的 PHP 文件,而不是进 index.php。检查你的 location ~ \.php$ 块里有没有这行:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
更稳妥写法是用 $realpath_root(防符号链接问题):
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
同时确认 include fastcgi_params; 或 include fastcgi.conf; 已存在,否则 QUERY_STRING 等参数可能丢失。
框架配置三项不能漏:url_route_on、pathinfo_depr、url_html_suffix
光 Nginx 转发过去没用,TP5 自己得开启路由并按约定解析。打开 config/app.php,确认这三项:
-
'url_route_on' => true:关了就彻底不走路由,所有请求都进默认控制器 -
'pathinfo_depr' => '/':必须是/,和 Nginx 规则中s=$1的分隔逻辑一致;设成-或.就会解析失败 -
'url_html_suffix' => '':空字符串才能支持/user/list这种无后缀 URL;设成'html'就只能访问/user/list.html
另外,APP_DEBUG 最好暂时开真,方便看到路由加载失败的具体提示。
验证顺序很重要:先测 index.php,再测伪静态
别一上来就访问 /user/list 看 404。先试这个地址:
http://yourdomain.com/index.php/user/list
能正常加载,说明框架层和 PHP 层 OK;再试:
http://yourdomain.com/user/list
如果还 404,问题一定出在 Nginx 转发环节。此时立刻看 Nginx 错误日志(error.log),常见报错如 rewrite or internal redirection cycle 表示重写死循环,File not found 表示 root 或 SCRIPT_FILENAME 指错了路径。
TP5 的伪静态不是“加条规则就完事”,它是 Nginx 路径重写、PHP 参数传递、框架路由开关三者咬合的结果,任一环松动都会白屏或 404。最常被忽略的是 root 指向位置和 fastcgi_param SCRIPT_FILENAME 的拼接方式——这两处写错,连 index.php 都进不去。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











