Yii2微框架REST应用启用urlManager美化URL后全返回404
故障核心原因
所有404问题由两个核心配置错误共同导致:
- 开启
enableStrictParsing => true后,URL管理器只会匹配rules数组中明确定义的路由规则,未声明的路径(包括你未配置的site/index首页、原生?r=控制器/动作格式的非美化URL)会被直接判定为不存在返回404。 - 多数微框架部署场景下存在重写规则不生效问题,包括
.htaccess存放路径错误、Web服务重写模块未开启、Nginx环境误用Apache重写规则等。
分步修复方案
1. 修正urlManager组件配置
调整配置如下,补全缺失的首页路由,按需调整严格解析模式和REST路由规则:
'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => false, // 调试阶段先关闭严格解析,确认所有功能正常后再按需开启 'showScriptName' => false, 'rules' => [ // 补全默认首页路由 '' => 'site/index', // REST接口路由,pluralize设为false可取消默认的控制器名自动复数转换,不需要可以删掉该配置项 ['class' => 'yii\rest\UrlRule', 'controller' => 'post', 'pluralize' => false], ], ]
注意:如果后续要开启
enableStrictParsing,必须把所有需要对外提供访问的路由全部写入rules数组,包括静态页面、特殊动作的路径,否则对应路径会直接返回404。另外yii\rest\UrlRule默认会将控制器名转为复数生成路由,比如配置post控制器时,默认访问路径是/posts而非/post,不需要复数规则就加'pluralize' => false。
2. 排查Web服务重写规则生效问题
重写规则不生效是美化URL失效的高频诱因,按你使用的Web服务逐一检查:
- Apache环境:
- 确认已开启
mod_rewrite模块 - 站点配置中对应入口目录的
AllowOverride设置为All,否则.htaccess规则不会被读取 .htaccess文件必须和入口文件index.php放在同一目录(通常是项目的web目录),不要放在项目根目录- 你当前使用的
.htaccess规则本身是正确的,满足以上条件即可正常工作
- 确认已开启
- Nginx环境:
- Nginx不识别
.htaccess规则,需要在站点的server配置块中添加如下重写规则:
location / { try_files $uri $uri/ /index.php?$args; }- 重载Nginx配置后规则才会生效
- Nginx不识别
3. 访问验证
配置完成后按以下路径验证:
- 首页访问
/即可匹配到site/index动作 - 若未关闭复数规则,POST接口访问路径为
/posts,开启pluralize => false后访问路径为/post - 调试阶段关闭
enableStrictParsing时,原生非美化URL?r=控制器/动作格式也可以正常访问,方便排查问题
内容的提问来源于stack exchange,提问作者trejder
相关产品推荐
相关产品推荐

