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模块,导致路由解析混乱。
修复步骤:
- 修改
api/config/main.php中的controllerNamespace:
'controllerNamespace' => 'api\controllers', // 改为api根控制器命名空间
- 确保
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
相关产品推荐
相关产品推荐

