0

Я использую расширенный шаблон. Я создал все свои действия на SiteController, поэтому все мои URL-адреса - domain.com/site/something, и мне нужно удалить слово «сайт» из URL-адреса, чтобы оно было domain.com/something.Yii2: удалить контроллер из URL

Я попытался следующие правила, основанные на this question

'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', 
     ), 
    ], 

также попытался это на основе this other question:

'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', 
     ), 
    ], 

но и не не работает. Я получаю 404, когда я печатаю domain.com/something. Я также пробовал без первого /, и он тоже не работал.

Любые мысли?

ответ

3

Попробуйте с:

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

     // ... 

     // last rule 
     '<action:(.*)>' => 'site/<action>', 
    ], 
], 
+0

СПАСИБО! Это сработало отлично! У вас будет ссылка, где я могу прочитать разницу между \ w + и (. *), Потому что это изменение сделало трюк. –

+1

Здесь вы можете найти отличное объяснение reg expr: https://regex101.com/. \ w + соответствует любой букве, номеру или подчеркиванию. * улаживает ноль или более символов. Возможно, ваше действие состоит из нескольких слов. –

2

Другим способом:

'rules' => [ 
    '<alias:\w+>' => 'site/<alias>', 
], 
+1

этот способ лучше, потому что первый ответ дает ошибку 404 для всех остальных контроллеров (не SiteController) – Skav

Смежные вопросы