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

YII2美化商品URL遇404问题:如何实现domain.com/adv/14792格式

解决Yii2 URL美化后无效果或404的问题

问题根源分析

你要把domain.com/adv?id=14792优化为domain.com/adv/14792,两次配置出现的问题分别对应不同原因:

  • 第一次规则无效果:规则映射的是site/adv,但如果URL是硬编码生成而非用Yii的URL助手,规则不会自动触发;加上enableStrictParsing=true的限制,若原有路由未被正确覆盖,也会导致规则不生效。
  • 第二次规则出现404:规则映射到adv(即AdvController的默认方法),如果项目中不存在AdvController,或者该控制器没有接收$id参数的actionIndex方法,就会返回404;另外Web服务器未配置重写规则,请求无法被Yii框架处理也会引发404。

具体解决方案

1. 匹配控制器与方法

如果商品页逻辑在SiteController的actionAdv中,保留第一条规则,但必须用Yii的URL助手生成链接:

// 生成美化后的URL
echo Url::to(['site/adv', 'id' => 14792]);

如果想直接映射到AdvController,先确保项目中存在该控制器,且方法接收$id参数:

// AdvController.php
class AdvController extends Controller
{
    public function actionIndex($id)
    {
        // 商品逻辑处理代码
    }
}

2. 配置Web服务器重写规则

  • Apache:在web目录下创建.htaccess文件,写入:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
  • Nginx:在server配置块中添加:
location / {
    try_files $uri $uri/ /index.php?$args;
}

3. 调整urlManager配置

建议关闭严格解析(除非你强制所有请求必须匹配规则),并保证规则顺序正确(具体规则放前面):

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'enableStrictParsing' => false,
    'rules' => [
        'adv/<id:\d+>' => 'site/adv', // 或改为'adv',根据你的控制器调整
        '<alias:[\w-]+>' => 'site/<alias>',
    ],
],

4. 验证与排查

修改配置后清除Yii缓存(若开启缓存),访问domain.com/adv/14792测试。如果仍有问题,查看runtime/logs目录下的框架日志,根据错误信息定位具体问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:30:42