Yii2中OPTIONS请求全量记录列表接口返回405异常问题
问题根因
这是URL规则配置错误导致的,核心问题有两个:
- 第二条
yii\rest\UrlRule自定义patterns时,错误将OPTIONS方法直接绑定到了index动作。Yii2 REST的OPTIONS请求需要路由到控制器内置的options动作返回允许的方法列表,而index动作(yii\rest\IndexAction)本身只允许GET、HEAD请求,收到OPTIONS请求会直接抛出405异常。 - 第二条规则未关闭默认的
pluralize=>true配置,也没有手动指定路径前缀,默认只会匹配复数路径/users,无法覆盖单数路径/user的列表请求,和你预期的「单复数路径同时支持访问」需求不符。
另外你的User模型规则里还有一处笔误,和当前405问题无关但会影响后续接口使用:最后一条safe规则里把status、created_at两个字段写在了同一个字符串中,Yii会将其识别为单个名为status,created_at的字段,导致这两个字段无法正常批量赋值。
修复步骤
- 调整urlManager中第二条REST规则的配置,修正patterns的路由逻辑,同时配置前缀支持单复数路径访问,修正后的完整urlManager规则配置如下:
'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ [ 'class' => 'yii\rest\UrlRule', 'controller' => 'user', 'pluralize' => false, 'except' => ['index'], ], [ 'class' => 'yii\rest\UrlRule', 'controller' => 'user', 'pluralize' => false, 'prefix' => 'user,users', // 同时匹配/user、/users两个根路径 'patterns' => [ 'GET,HEAD' => 'index', '' => 'options', // 根路径OPTIONS请求统一走内置options动作 ], ], ], ],
- 修正User模型rules里的字段笔误,把最后一条safe规则调整为:
[['password_hash', 'password_reset_token', 'verification_token', 'auth_key', 'status', 'created_at', 'updated_at', 'password'], 'safe'],
配置完成后,OPTIONS /users、OPTIONS /user都会正常返回200状态码和对应的允许方法头,GET /user、GET /users也都能正常访问列表接口,单资源路径的原有逻辑不受影响。
内容的提问来源于stack exchange,提问作者trejder
相关产品推荐
相关产品推荐

