首页能打开、分页链接404,说明请求未进入Yii而被Nginx直接拒绝;根本原因是try_files缺少$args导致分页参数丢失,且PHP-FPM未正确传递REQUEST_URI,致使UrlManager无法解析美化路径与?page=2等参数。

首页能打开、分页链接却 404,说明请求根本没进 Yii,而是被 Nginx 直接拒掉了——问题出在转发规则没把带查询参数(如 ?page=2)的 URL 正确交给 index.php。
检查 try_files 是否带 $args
这是最常见也最关键的一处遗漏。Nginx 必须把原始查询字符串完整传过去,Yii 的 UrlManager 才能解析出美化路径 + 分页参数。
- 错误写法:
try_files $uri $uri/ /index.php;→ 丢掉所有?page=2这类参数 - 正确写法:
try_files $uri $uri/ /index.php?$args;→ 保留全部 GET 参数 - 若用的是
pathInfo模式(默认),$args仍要保留,否则分页、搜索、筛选等参数全失效
确认 PHP-FPM 收到了 REQUEST_URI
即使 Nginx 转发了请求,如果 PHP 没拿到真实的请求路径,Yii 就只能看到 /index.php,无法识别 /post/index?page=2 这样的路由。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 在
location ~ \.php$块中,必须包含:fastcgi_param REQUEST_URI $request_uri; - 缺这行,
$_SERVER['REQUEST_URI']是空或错的,UrlManager解析失败,直接返回 404 - 顺便检查:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;和fastcgi_split_path_info(Windows 或符号链接环境建议用$realpath_root)
验证 urlManager 配置是否启用且一致
前后端分离项目(如高级版)容易在此出错:前端分页生成的 URL 是 /product/123?page=2,但后端 urlManager 没开美化,或规则不匹配,就会跳转失败。
- 确保
config/web.php中有:'enablePrettyUrl' => true,'showScriptName' => false, - 若使用自定义路由规则(如
'post/<id:>' => 'post/view'</id:>),需确认分页参数是否被显式允许(通常加&page=即可,无需额外 rule) - 临时关闭美化:
?r=post/index&page=2能打开 → 说明分页逻辑本身没问题,纯属伪静态链路中断
排查分页链接是否被其他 location 拦截
宝塔用户尤其要注意:某些「伪静态模板」或默认配置里存在冲突的 location ~ \.html$ 或 location ~* \.(js|css|png)$,可能误判分页 URL(如 /list?page=2 被当成不存在的静态路径提前返回 404)。
- 检查 Nginx 配置中是否有类似
try_files $uri =404;出现在location ~ \.php$前面 - 把分页 URL(如
/post/index?page=2)复制进浏览器,看返回的是 Nginx 白页(服务器级 404)还是网站自定义 404(框架已运行) - 若为前者,说明请求压根没到 PHP;后者则需查控制器、视图是否存在,或权限/状态判断逻辑


















