测试ThinkPHP 5.1 Nginx伪静态需四步分层验证:一、访问/index.php/index/hello确认PHP与框架基础正常;二、访问/index/hello验证Nginx转发是否生效;三、在public/index.php首行var_dump($_SERVER['PATH_INFO']和$_GET['s'])确认路径参数送达;四、查error.log定位Primary script unknown等关键错误。

测试 ThinkPHP 5.1 的 Nginx 伪静态规则是否正确,不能只看页面能不能打开,而要分层验证请求是否真正“走通”:从 URL 访问、Nginx 转发、PHP 接收路径,到框架路由解析,每一步都可能断链。以下是可直接操作的四步验证法:
一、先测带 index.php 的原始地址
这是排除框架和 PHP 自身问题的基础环节:
- 访问 http://your-domain.com/index.php/index/hello(假设有 Index 控制器和 hello 方法)
- 能正常显示内容 → 说明 PHP 解析、自动加载、路由基础功能均正常
- 若报 500、白屏或 Class not found 错误 → 检查 root 是否指向 public/ 目录,以及 fastcgi_param SCRIPT_FILENAME 是否拼对(推荐用
$realpath_root$fastcgi_script_name)
二、再测不带 index.php 的伪静态地址
这是验证 Nginx 规则是否起作用的核心步骤:
- 访问 http://your-domain.com/index/hello
- 成功显示 → 伪静态大概率已生效
- 返回 Nginx 404 页面 → 检查:location / 块是否在 server 内且位置正确(必须在
location ~ \.php$之前)、root 是否指向 public/、配置是否已重载(执行nginx -s reload) - 返回空白页(HTTP 200 但无内容)→ 很可能是 PATH_INFO 为空,需确认
location ~ \.php$块中是否包含fastcgi_param PATH_INFO $fastcgi_path_info;
三、用代码验证路径参数是否送达
在 public/index.php 开头加一行,直观看 Nginx 是否把原始路径交给了框架:
立即学习“PHP免费学习笔记(深入)”;
- 编辑 public/index.php,在
<?php后第一行插入:var_dump($_SERVER['PATH_INFO'] ?? 'PATH_INFO missing', $_GET['s'] ?? 's param missing'); die(); - 访问 http://your-domain.com/user/list
- 输出类似
string(10) "/user/list"或string(10) "user/list"→ 路径已送达 - 输出
'PATH_INFO missing'且's param missing'→ Nginx 完全没转发,规则未触发或被跳过
四、查 Nginx 错误日志定位关键报错
错误日志里往往一句话就暴露根本原因:
- Linux 宝塔日志路径:
/www/wwwlogs/your-site.error.log - Windows 小皮面板日志路径:
c:\phpstudy_pro\extensions\nginx1.22.1\logs\error.log - 重点关注:
Primary script unknown(SCRIPT_FILENAME 路径错误)、no input file specified(入口文件路径不对)、rewrite or internal redirection cycle(重写循环)等提示



















