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

Yii2微框架REST应用启用urlManager美化URL后全返回404

故障核心原因

所有404问题由两个核心配置错误共同导致:

  1. 开启enableStrictParsing => true后,URL管理器只会匹配rules数组中明确定义的路由规则,未声明的路径(包括你未配置的site/index首页、原生?r=控制器/动作格式的非美化URL)会被直接判定为不存在返回404。
  2. 多数微框架部署场景下存在重写规则不生效问题,包括.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配置后规则才会生效

3. 访问验证

配置完成后按以下路径验证:

  • 首页访问/即可匹配到site/index动作
  • 若未关闭复数规则,POST接口访问路径为/posts,开启pluralize => false后访问路径为/post
  • 调试阶段关闭enableStrictParsing时,原生非美化URL?r=控制器/动作格式也可以正常访问,方便排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:18:28