ThinkPHP5在二级域名下配置Nginx伪静态需将root精确指向public目录,使用try_files转发请求至/index.php,并确保fastcgi_param包含SCRIPT_FILENAME和PATH_INFO,同时开启TP5路由功能。

ThinkPHP5 在二级域名下配置 Nginx 伪静态,核心是让所有非真实资源的请求都正确转发到 public/index.php,同时确保 PATH_INFO 或 query 参数能被框架准确识别。和根域名不同,二级域名本身不改变伪静态逻辑,但需注意部署路径、root 指向及入口文件位置是否匹配。
确认项目结构与 Nginx root 设置
二级域名(如 api.example.com)通常指向独立站点目录,例如:/www/wwwroot/api.example.com/
该目录下应为 ThinkPHP5 的完整结构,且 public/ 是 Web 可访问入口。Nginx 的 root 必须精确指向 public 目录,而非项目根目录:
root /www/wwwroot/api.example.com/public;- 不能写成
root /www/wwwroot/api.example.com;,否则 CSS/JS 404、路由无法匹配静态资源 - 检查
public/index.php是否可直接通过http://api.example.com/index.php访问
推荐使用 try_files 方式(更稳定)
在对应二级域名的 server 块中,添加以下 location / 配置:
location / { try_files $uri $uri/ /index.php?$query_string; }- 此写法不依赖
PATH_INFO,用$_GET['s']接收路由(TP5 默认支持s=xxx形式) - 避免使用
if (!-e $request_filename),防止 Nginx 变量作用域异常或重写冲突
确保 PHP 处理块参数完整
在 location ~ \.php$ 块中,必须包含以下关键 fastcgi_param:
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;-
fastcgi_param PATH_INFO $fastcgi_path_info;(TP5 需要解析 PATH_INFO 时才必需) -
include fastcgi_params;或显式补全常用参数 - 若用宝塔面板,升级 PHP 后常丢失
PATH_INFO行,需手动检查并补回
框架内开启路由并校验配置
仅 Nginx 配置不够,还需 TP5 主动启用路由机制:
立即学习“PHP免费学习笔记(深入)”;
- 打开
config/app.php,确认:'url_route_on' => true,'pathinfo_depr' => '/','url_html_suffix' => '', - 若使用子目录式 URL(如
/v1/user),确保控制器命名与路由定义一致 - 临时调试可在
public/index.php开头加:$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'];(上线前务必删除)
配置完成后执行 nginx -t && nginx -s reload,访问 http://api.example.com/index/index 应正常响应,不出现 404 或跳转到 index.php 路径。



















