Yii - скрытие имени модуля в URL

Моя нынешняя структура URL выглядит следующим образом:

http://www.mydomain.com/module/controller/action

Мне нужно скрыть раздел модуля URL. Есть ли способ сделать это?

Благодарю.

2 ответа

Решение

Чтобы указать URL-адрес http://www.mydomain.com/customer/login на модуль, в вашей конфигурации (protected/config/main.php) в urlManager:

'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName' => false,
        'rules'=>array(
            'customer/login' => 'module/controller/action',

            '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        ),
    ),

Чтобы выполнить какое-либо действие контроллера, перейдите к модулю / контроллеру / действию (как описано ниже), которое вы можете использовать:

'<controller:\w+>/<action:\w+>'=>'module/controller/action',

или же

'<controller:\w+>/<action:\w+>'=>'module/<controller:\w+>/<action:\w+>',

В зависимости от того, является ли контроллер / часть действия значения (справа от =>) заданным значением или переменной.

Так что, если вы хотите, чтобы какой-либо контроллер / действие перешло к конкретному модулю / контроллеру / действию url, вы должны использовать первый пример. Например, если вы хотите, чтобы контроллер / сайт действия / тест перешел в модуль / контроллер / действие, вы должны использовать первый пример выше

Если вы хотите, чтобы какой-либо контроллер / действие перешло к динамическому контроллеру / действию, вы используете второе. Например, если вы хотите, чтобы контроллер / сайт действия / тест перешел в модуль / сайт / тест, вы должны использовать второй пример выше

Это новое правило должно быть выше трех правил Yii по умолчанию, так как они читаются, сверху вниз и соответствуют только первому правилу, которое оно находит

Да, вы можете определить любые правила URL в вашей конфигурации.

Ваше правило URL может выглядеть примерно так:

'<controller:(foo|bar)>/<action>' => 'module/<controller>/<action>',
Другие вопросы по тегам