如何在urlManager规则中忽略url的一部分?

时间:2015-04-21 15:04:48

标签: routing yii2

我希望此网址/admin/personal/index运行personal控制器和index操作,因此我将此规则添加到urlManager

'admin/<controller>/<action>' => '<controller>/<action>'

但似乎他认为admin - 是控制者而personal - 是行动。但我想忽略admin部分网址。我怎样才能实现它? (如果可能的话,没有.htaccess)

也尝试使用Jorgen的解决方案,但仍然会出现404错误。在日志中这一行:

Request parsed with URL rule: <module:\w+>/<controller:\w+>/<action:\w+>

主要本地配置

'urlManager' => [
        'showScriptName' => false,
        'enablePrettyUrl' => true,
        'rules' => [
            'admin/<controller:\w+>/<action:\w+>' => '<controller>/<action>',
        ],
    ],

的.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

只有在我写下一条规则

时才有效
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<controller>/<action>',

但在这种情况下,'admin'前缀当然不会添加到url。但直接,它运作正常。

我找到了原因:共同配置中还有另一条规则。

Thx, Jorgen ,求助! 问题已结束

1 个答案:

答案 0 :(得分:0)

试试这个:

'admin/<controller:\w+>/<action:\w+>' => '<controller>/<action>'

您需要为参数指定正则表达式。 如果在此设置之前有<controller:\w+>/<action:\w+>的参数,则可能还会发生冲突。尝试将其作为第一个参数。

来自docs

  

URL规则可以与一些命名查询参数相关联,这些参数在模式中以格式指定,其中ParamName指定参数名称,RegExp是用于匹配参数值的可选正则表达式。如果未指定RegExp,则表示参数值应为不带任何斜杠的字符串。

     

注意:您只能为参数指定正则表达式。模式的其余部分被视为纯文本。