yii框架404绝大多数源于web服务器配置错误而非代码问题,如nginx未配置try_files、path_info缺失、fastcgi参数错误或模块未启用等。

Yii 框架报 404,绝大多数情况不是代码写错了,而是请求压根没进到 Yii 的路由解析环节——它在 Web 服务器层就被拦下了,或者进来了但路径被截断/误判了。
nginx 下所有非 index.php 路由都 404
这是最典型的 Web 服务器配置问题。Yii 2.x 依赖 PATH_INFO 解析 /index.php/user/login 这类路径,而 Nginx 默认不提供它。
- 检查
location /块是否含try_files $uri $uri/ /index.php?$args;—— 缺$args会导致 GET 参数丢失,urlManager解析失败 -
location ~ \.php$块里必须用$realpath_root而非$document_root设置SCRIPT_FILENAME,否则符号链接部署时会找不到文件 - 必须启用
fastcgi_split_path_info ^(.+\.php)(/.+)$;,并显式设置PATH_INFO:fastcgi_param PATH_INFO $fastcgi_path_info; - 确认 PHP-FPM 的
security.limit_extensions包含.php,否则可能拒绝执行
能打开首页和登录页,但其他路由(如 /gii、/debug)404
说明入口脚本运行正常,问题出在模块加载或 URL 解析逻辑上。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 检查
config/web.php中是否在YII_ENV_DEV下正确注册了模块:'gii' => ['class' => 'yii\gii\Module', 'allowedIPs' => ['127.0.0.1', '::1']]—— 生产环境默认禁用,且allowedIPs不匹配会静默 404 - 若配置了
urlManager的'suffix' => '.html',则访问/gii必须写成/gii.html,否则框架认为这不是合法路由 - 运行
composer dump-autoload或重装yii2-gii包:有时 vendor 目录下模块文件权限异常或 autoload 映射损坏,会导致类加载失败,直接跳过模块注册
后台无任何日志,前端请求直接返回 404
这表示请求甚至没到达 Yii 的 Application::run() 阶段,极大概率是 Web 服务器未将请求转发给 PHP,或 PHP 没执行到入口文件。
- 在
web/index.php开头加file_put_contents('/tmp/yii-start.log', print_r($_SERVER, true), FILE_APPEND);,看该文件是否有写入 —— 没写入=请求没进 PHP - 检查 Apache 是否启用了
mod_rewrite,且虚拟主机配置中<directory></directory>下有AllowOverride All;Nginx 则确认没有遗漏include fastcgi_params; - 确认
index.php文件权限为可读可执行,且其所在目录的父路径(如web/)被 Web 服务器设为 root 目录,而非更上层(比如项目根目录)
urlManager 配置看似正确,但自定义控制器仍 404
常见于控制器命名、命名空间或路由规则与实际不符,且错误非常隐蔽。
- 控制器类名必须以
Controller结尾,且文件名要匹配(UserController.php→class UserController extends Controller) - 确保控制器在
controllers目录下,且命名空间与应用配置一致(如 frontend 应用通常为frontend\controllers) - 如果用了子目录结构(如
controllers/api/UserController.php),需在urlManager中配置rules显式映射,或调整controllerNamespace - 临时在
index.php中加var_dump($_SERVER['REQUEST_URI'], Yii::$app->requestedRoute); die;,对比原始 URI 和框架解析出的路由,能看出是否被提前截断或误判
真正难排查的 404 往往卡在「请求进了 PHP,但没进 Yii」这个缝隙里——比如 Nginx 把 /admin/user 当作静态路径去磁盘找,或者 Apache 把 .htaccess 里的规则当注释跳过了。动手前先确认那行 var_dump 能否打出内容,比翻十遍配置更省时间。










