Yii2路由解析失败主因是Web服务器未正确传递PATH_INFO:需配置fastcgi_split_path_info正则提取并设置fastcgi_param PATH_INFO,用$document_root而非$realpath_root指定SCRIPT_FILENAME,且前后端urlManager须分离配置。

Yii2 路由解析失败(比如访问 /product/123 却返回 404 或空白页)时,默认不报具体原因,只静默 fallback 到 index.php 或直接 500 —— 这不是代码写错了,而是 Web 服务器没把原始 PATH_INFO 正确传给 Yii。
检查 Nginx 的 fastcgi_split_path_info 是否启用
这是 Windows 或 Linux 下 Nginx 环境最常漏配的项。没有它,$_SERVER['PATH_INFO'] 就是空的,Yii 根本收不到路由路径,urlManager 彻底失效。
- 在 server 块或 location ~ \.php$ 块里必须有这行:
fastcgi_split_path_info ^(.+\.php)(/.+)$; - 紧跟着要加:
fastcgi_param PATH_INFO $fastcgi_path_info; - 缺任意一条,Yii 就只能看到
/index.php,后面所有路由参数都丢失
确认 $document_root 而非 $realpath_root 用于 SCRIPT_FILENAME
尤其在 Windows 或用了符号链接的部署中,用 $realpath_root 会导致 Yii 加载配置失败,进而路由初始化中断,错误被吞成 500。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 检查 fastcgi_param 设置:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - 如果写成了
$realpath_root,Nginx 会解析物理路径,可能越出应用目录,触发 open_basedir 限制或文件未找到 - 这个错误不会打在 PHP 日志里,但 Nginx error log 会出现
Primary script unknown或Permission denied
验证 urlManager 配置是否生效且无冲突
前后端共用一套 urlManager 配置却没区分环境,是高级模板里 404 的高频原因。
- 前端(web 应用)和后端(console 或 API)的
urlManager必须分开配置,不能复用同一份规则 - 检查是否启用了
'enablePrettyUrl' => true,但没配好 Web 服务器重写规则(如 Apache 缺.htaccess,Nginx 缺try_files) - 规则里用了
<module>/<controller>/<action></action></controller></module>但实际请求没带模块名,也会 404 —— 不是路由失败,是匹配不上任何 rule
让真实错误浮出来:强制开启错误显示
路由解析失败常被 errorHandler 拦截,但开发时你得先看到原始报错,而不是白屏或跳转到 site/error。
- 打开
web/index.php,确保开头两行是:defined('YII_DEBUG') or define('YII_DEBUG', true);和defined('YII_ENV') or define('YII_ENV', 'dev'); - 在它们下面立刻加:
error_reporting(E_ALL); ini_set('display_errors', '1'); - 此时如果路由根本没进 Yii(比如 Nginx 没转发对),错误仍不会出现 —— 那就去看
nginx/error.log或apache/error_log,别只盯着 PHP 日志
真正卡住的地方往往不在 Yii 配置本身,而在 Web 服务器如何把请求“交”给它;PATH_INFO 为空、SCRIPT_FILENAME 错位、日志被静默屏蔽,这三个点漏掉一个,排查就会绕半天。


















