ЧПУ-адреса в Yii2
Краткая заметка на тему: «Как в Yii2 basic убрать web/ из URL с помощью
.htaccess и правил urlManager?»
1) Создайте файл .htaccess в корне сайта со следующим содержимым:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule ^assets/(.*)$ /web/assets/$1 [L]
RewriteRule ^css/(.*)$ web/css/$1 [L]
RewriteRule ^js/(.*)$ web/js/$1 [L]
RewriteRule ^images/(.*)$ web/images/$1 [L]
RewriteRule (.*) /web/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /web/index.php
2) В папке web создайте файл .htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
3) В конфиге web.php указываем настройки urlManager:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => false,
'suffix' => '.html',
'rules' => [
'<action:>' => 'site/<action>',
],
],
4) Там же, в конфиге web.php, в секции request добавляем строку:
'baseUrl' => '',
После выполнения всех шагов может возникнуть проблема с отображением стилей и скриптов,
а именно после добавления 'baseUrl' => ''.
Если используется локальный сервер OpenServer, проверьте его настройки: в разделе «Модули» → блок HTTP должна быть включена только связка Apache. При одновременном использовании Apache + Nginx возможны конфликты с обработкой ЧПУ-адресов.