You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yii2 REST API模块路由异常:访问接口出现404错误求助

Yii2 REST API 404错误排查方案

以下是针对你遇到的404错误的逐步排查与修复步骤:

1. 优先检查服务器URL重写配置

你已开启enablePrettyUrl和showScriptName=false,必须确保服务器支持URL重写,否则无法解析美化后的路由:

Apache环境

在API应用的web目录下创建/修改.htaccess文件,内容如下:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

同时确保Apache的mod_rewrite模块已启用。

Nginx环境

在站点配置的server块中添加:

location / {
    try_files $uri $uri/ /index.php?$args;
}

2. 修正模块与路由配置冲突

你的API应用配置中存在控制器命名空间与模块注册的冲突:

  • 当前controllerNamespace设为api\modules\v1\controllers,同时又注册了v1模块,导致路由解析混乱。

修复步骤:

  1. 修改api/config/main.php中的controllerNamespace:
'controllerNamespace' => 'api\controllers', // 改为api根控制器命名空间
  1. 确保api/modules/v1/Module.php文件存在(模块必须有对应的Module类),内容如下:
<?php
namespace api\modules\v1;

class Module extends \yii\base\Module
{
    public $controllerNamespace = 'api\modules\v1\controllers';

    public function init()
    {
        parent::init();
    }
}

3. 调整URL规则匹配逻辑

你的URL规则中存在主键匹配的小问题,同时enableStrictParsing=true要求请求URL必须完全匹配规则:
修改urlManager的rules配置:

'rules' => [
    ['class' => 'yii\rest\UrlRule', 'controller' => ['v1/country'],
        'pluralize' => false,
        'tokens' => [
            '{id}' => '<id:\\w+>', // 匹配主键code的格式(字母)
        ],
    ],
],

4. 验证正确的访问URL

确保访问的URL与配置匹配:

  • 正确的接口地址应为:http://localhost/v1/country(假设你的Web服务器根目录指向API应用的web文件夹)
  • 如果API部署在子目录(如localhost/api/web),则地址为:http://localhost/api/web/v1/country

5. 辅助排查手段

  • 开启Yii调试模式(在common/config/params-local.php中设置YII_DEBUG=true),查看详细的错误日志,定位具体问题
  • 检查数据库连接配置(common/config/main-local.php中的db节点),确保能正常访问country表
  • 验证Country模型的primaryKey方法返回正确,与数据库表主键一致

内容的提问来源于stack exchange,提问作者sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:33:58