Как правильно настроить urlManager в Yii2?

Товарищи дорогие!!! Помогите пожалуйста разобраться с вопросом...

В common/config/main.php прописано:

'components' => [
       'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'enableStrictParsing' => true,
            'rules' => [
                [
                    'pattern' => '',
                    'route' => '',
                    'suffix' => '',
                ],


                [
                    'pattern' => '<controller>/<action>/<id:\d+>',
                    'route' => '<controller>/<action>',
                    'suffix' => '',
                ],
                [
                    'pattern' => '<controller>/<action>',
                    'route' => '<controller>/<action>',
                    'suffix' => '',
                ],
                [
                    'pattern' => '<module>/<controller>/<action>/<id:\d+>',
                    'route' => '<controller>/<action>',
                    'suffix' => '',
                ],
                [
                    'pattern' => '<module>/<controller>/<action>',
                    'route' => '<controller>/<action>',
                    'suffix' => '',
                ],

            ],
        ],
]


В frontend/config/main.php

'components' => [
        'urlManager' => [
            'baseUrl' => '',
        ],
]


В backend/config/main.php

'components' => [
       'urlManager' => [
            'baseUrl' => '/admin/',
        ],
]


Файл .htaccess в корне:

<IfModule mod_rewrite.c>
    Options -Indexes
    RewriteEngine On
</IfModule>

<IfModule mod_rewrite.c>
    RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
    RewriteRule ^admin/?(.*) backend/web/index.php/$1 [L]
    RewriteRule ^(.*)$ frontend/web/index.php/$1 [L]
</IfModule>


Файлы .htaccess в папках frontend и backend
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php


Весь этот код прекрасно работает и организовывает ссылки вида:
www.mysite.ru/site/index
www.mysite.ru/post/index
www.mysite.ru/admin/site/index
www.mysite.ru/admin/user/index
и тому подобное

Необходимо Site убрать из ссылок, тоесть что бы в ссылке не было site, но экшен что бы шел через этот контроллер
www.mysite.ru/index - должен отрабатывать SiteController экшен index, а все остальные ссылки оставить как есть

Добавляю в common/config/main.php
[
                    'pattern' => '<action>/<id>',
                    'route' => 'site/<action>',
                    'suffix' => '',
                ],
                [
                    'pattern' => '<action>',
                    'route' => 'site/<action>',
                    'suffix' => '',
                ],


это избавляет от site и ссылки получаются
www.mysite.ru/index вместо www.mysite.ru/site/index, как раз то что нужно, но перестают работать ссылки через другие контроллеры
например www.mysite.ru/user/index - выдает сообщение об ошибке Not Found (#404)
Перекопал кучу доков и блогов но так и не могу найти решение! Помогите люди добрые!
  • Вопрос задан
  • 1379 просмотров
Решения вопроса 1
@amar_std Автор вопроса
Решил проблему таким способом:
[
                    'pattern' => '<action>/<id>',
                    'route' => 'site/<action>',
                    'suffix' => '',
                ],
                [
                    'pattern' => '<action>',
                    'route' => 'site/<action>',
                    'suffix' => '',
                ],


Необходимо добавить в frontend/config/main.php и backend/config/main.php и тогда все отлично работает!
Если добавить только в common/config/main.php, то не работает! Вот такая странная штука!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
'pattern' => 'index',
                    'route' => 'site/index',
                    'suffix' => '',

или так
rules=>[
'index' => 'site/index',
             ]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы