Yii2:从URL中删除控制器

Ian*_*one 2 model-view-controller friendly-url pretty-urls yii2 yii2-advanced-app

我正在使用高级模板。我在SiteController上创建了所有操作,因此所有URL都是domain.com/site/something,并且需要从URL中删除“ site”一词,因此它将是domain.com/something。

我根据这个问题尝试了以下规则

'urlManager' => [
        'class' => 'yii\web\UrlManager',
        'showScriptName' => false,
        'enablePrettyUrl' => true,
        'rules' => array(
                '/<action:\w+>/<id:\d+>' => 'site/<action>',
                '/<action:\w+>' => 'site/<action>',
                '/noticia/<slug>' => 'site/noticia',
        ),
    ],
Run Code Online (Sandbox Code Playgroud)

也基于另一个问题尝试了此操作:

'urlManager' => [
        'class' => 'yii\web\UrlManager',
        'showScriptName' => false,
        'enablePrettyUrl' => true,
        'baseUrl' => 'http://localhost/websites/transcita/app/frontend/web',
        'rules' => array(
                [
                    'pattern' => '<action:\w+>',
                    'route' => 'site/<action>'
                 ],
                [
                    'pattern' => '<action:\w+>/<id:\d+>',
                    'route' => 'site/<action>'
                 ],
                '/noticia/<slug>' => 'site/noticia',
        ),
    ],
Run Code Online (Sandbox Code Playgroud)

但两者都不起作用。输入domain.com/something时得到404。我也尝试了没有第一个/的情况,但也不起作用。

有什么想法吗?

小智 8

其它的办法:

'rules' => [
    '<alias:\w+>' => 'site/<alias>',
],
Run Code Online (Sandbox Code Playgroud)

  • 这种方式更好,因为第一个答案为所有其他控制器(不是 SiteController)提供了 404 错误 (2认同)

Fab*_*lli 6

尝试:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'enableStrictParsing' => false,
    'rules' => [

        // ...

        // last rule
        '<action:(.*)>' => 'site/<action>',
    ],
], 
Run Code Online (Sandbox Code Playgroud)