.htaccess для Yii 2 advanced

Шаг 1

В корень (@app) проекта добавляем .htaccess со следующим содержанием:

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
</IfModule>

<IfModule mod_rewrite.c>
    # если /admin, то в backend
    RewriteCond %{REQUEST_URI} ^/(admin)
    RewriteRule ^admin/assets/(.*)$ backend/web/assets/$1 [L]
    RewriteRule ^admin/css/(.*)$ backend/web/css/$1 [L]
    RewriteRule ^admin/js/(.*)$ backend/web/js/$1 [L]
    RewriteCond %{REQUEST_URI} !^/backend/web/(assets|js|css|js)/
    RewriteCond %{REQUEST_URI} ^/(admin)
    RewriteRule ^.*$ backend/web/index.php [L]
    RewriteCond %{REQUEST_URI} ^/(assets|css|js|images)
    RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L]
    RewriteRule ^css/(.*)$ frontend/web/css/$1 [L]
    RewriteRule ^js/(.*)$ frontend/web/js/$1 [L]
    RewriteRule ^images/(.*)$ frontend/web/images/$1 [L]
    RewriteRule ^(.*)$ frontend/web/$1 [L]
    RewriteCond %{REQUEST_URI} !^/(frontend|backend)/web/(assets|css|js)/
    RewriteCond %{REQUEST_URI} !index.php
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ frontend/web/index.php
</IfModule>
Shell

Где admin - путь к @backend/web, его можно заменить на то, что вам больше нравится, например: administrator, cms-admin или ya-admin)

Шаг 2

В папку @frontend/web добавляем файл .htaccess со следующим содержанием:

RewriteEngine on

# если это папка или файл, открываем его
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# в противном случае перенаправляем на index.php
RewriteRule . index.php
Shell

Шаг 3

В файле @frontend/config/main.php в элемент components массива добавляем:

<?php
    'request' => [
        'baseUrl' => '',
    ],
    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            '' => 'site/index',
            '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
        ],
    ],
?>
PHP

Получится что-то вроде (более подробный пример):

<?php
//…
return [
    //…
    'components' => [
        //…
        'request' => [
            'baseUrl' => '',
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '' => 'site/index',
                '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
            ],
        ],
        //…
    ],
    //…
];
?>
PHP

Шаг 4

В папку @backend/web добавляем файл .htaccess со следующим содержанием:

RewriteEngine on

# если это папка или файл, открываем его
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# в противном случае перенаправляем на index.php
RewriteRule . index.php
Shell

Шаг 5

В файле @backend/config/main.php в элемент components массива добавляем:

<?php
    'request' => [
        'baseUrl' => '/admin',
    ],
    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            '' => 'site/index',
            '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
        ],
    ],
?>
PHP
Yii2 PHP.htaccessYii2