Yii2的urlManager第二条自定义规则无法生效返回404如何解决?
Yii2 urlManager第二条规则失效排查解决思路
- 调整规则匹配顺序
Yii2的URL规则遵循从上到下的匹配逻辑,精准度越高的规则越要放在前面。你当前的通用控制器规则覆盖了persons控制器,放在自定义规则前面会优先匹配拦截,把第二条自定义规则移到第一条规则上方即可。 - 修正路由末尾多余斜杠
第二条规则的route参数末尾多余斜杠会导致路由匹配错误,将'route' => 'details/expenses/'修改为'route' => 'details/expenses'。 - 统一id正则匹配规则
第一条规则的id允许匹配字母、数字、下划线、横杠,而第二条规则的<id:\w+>仅允许匹配字母、数字、下划线,如果你的id参数包含横杠会直接匹配失败,修改为<id:[\w-]+>和全局规则保持一致。 - 显式指定请求方式(可选)
可以给自定义规则加上请求方式限制,避免其他请求类型误匹配,调整后的配置参考:
[ 'name' => 'Gets all expenses of a given person id', 'pattern' => 'persons/<id:[\w-]+>/expenses', 'route' => 'details/expenses', 'verb' => ['GET'] ],
- 验证目标路由可用性
先直接访问原生路由index.php?r=details/expenses&id=你的测试id,确认DetailsController的actionExpenses方法本身可以正常访问,排除控制器方法不存在、权限拦截、业务代码报错等问题。 - 检查UrlRule类引入
确认配置文件顶部已经正确引入REST规则类:use yii\rest\UrlRule;,不要和yii\web\UrlRule混淆导致规则解析异常。
内容的提问来源于stack exchange,提问作者lordrebs
相关产品推荐
相关产品推荐

