Настройка ЧПУ для Yii2 Framework

Настройка ЧПУ для Yii2 Framework

Что такое ЧПУ и как их настроить в фреймворке Yii2. ЧПУ (Человеку Понятный Урл) — это URL-адрес страницы прописанный латиницей в понятном для человека виде, другими словами, это транслитерация слов в URL-адресе. На западе ЧПУ называют SEO-Friendly URL.

Основное отличие ЧПУ от обычных URL-адресов заключается в том, что он отображается в виде ключевого слова описывающего содержание раздела, а не содержит произвольный набор символов или цифр.

Фактически красивые адреса (ЧПУ) уже стали стандартом в веб-разработке и уже сложно отыскать сайт в сети, который бы использовал адреса с явными GET параметрами. Практически все сайты сейчас могут похвастать красивыми адресами.

Фреймворк Yii2 из коробки не имеет настроенных ЧПУ, но исправить это крайне легко. Как вы помните, по умолчанию сразу после установки фреймворка для доступа к главной странице нам необходимо обратиться к папке web, в которой и лежит публичная часть Yii приложения. Т.е. для доступа к главной странице мы должны были набрать адрес http://yii2/web/.
От папки web мы смогли легко избавиться с помощью файлов .htaccess.

Для «basic»

Создаем два файла .htaccess: один файл в директории «web», другой в корне сайта.

В файле, созданном в папке «web», помещаем следующее:

RewriteBase /
# Если это папка или файл, открываем его
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# В противном случае перенаправляем на index.php
RewriteRule . index.php

Здесь все просто, если запрос не является папкой или файлом, тогда запрос перенаправляется на index.php.

В корневом .htaccess необходимо отправлять все запросы в папку «web», тут можно использовать два варианта.

Первый короткий вариант:

RewriteEngine on
RewriteRule ^(.+)?$ /web/$1

Такое перенаправление отлично работает на чистом Apache, а вот на хостингах, использующих связку Apache + Nginx, могут возникнуть проблемы, поэтому я рекомендую всегда использовать более развернутое правило перенаправления.

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule ^assets/(.*)$ /web/assets/$1 [L]
RewriteRule ^css/(.*)$ web/css/$1 [L]
RewriteRule ^fonts/(.*)$ web/fonts/$1 [L]
RewriteRule ^js/(.*)$ web/js/$1 [L]
RewriteRule ^images/(.*)$ web/images/$1 [L]
RewriteRule ^robots.txt web/robots.txt [L]
# Все что находится в папке web, что нужно показать
RewriteRule (.*) /web/$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /web/index.php

Для «advanced»

Создаем три файла .htaccess: первый в корне, второй в «frontend/web», третий в «backend/web».

В файлы, находящиеся в «backend/web» и «frontend/web», помещаем одинаковое уже знакомое правило:

# Если это папка или файл, открываем его


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

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

В корневой .htaccess помещаем следующий код:


Options +FollowSymlinks
IndexIgnore */*
RewriteEngine On

RewriteCond %{REQUEST_URI} ^/(admin)
RewriteRule ^admin/assets/(.*)$ backend/web/assets/$1 [L]
RewriteRule ^admin/css/(.*)$ backend/web/css/$1 [L]

RewriteCond %{REQUEST_URI} !^/backend/web/(assets|css)/
RewriteCond %{REQUEST_URI} ^/(admin)
RewriteRule ^.*$ backend/web/index.php [L]

RewriteCond %{REQUEST_URI} ^/(assets|css|js|images|fonts|uploads|robots.txt)
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 ^fonts/(.*)$ frontend/web/fonts/$1 [L]
RewriteRule ^fonts/(.*)$ frontend/web/uploads/$1 [L]
RewriteRule ^robots.txt/(.*)$ frontend/web/robots.txt/$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

Принцип такой же, как и для «basic», просто отдельно прописываем правила для «frontend» и «backend», а все запросы на публичные файлы отправляем на «frontend».

Настройка ЧПУ в Yii2 приложениях

Из коробки в фреймворке ЧПУ выключены, чтобы их включить для «basic» необходимо открыть файл web.php, который находится в папке «config», в массиве «components» находим вложенный массив «request» и вставляем следующую настройку:

'baseUrl' => '',

Должно получиться так, как показано на скриншоте ниже.

Вставляем пустой baseUrl в массив request

В том же массиве «components» находим и рас комментируем следующий код:


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

Если данный код отсутствует, то просто вставляем его в массив «components» и сохраняем файл.

Для «advanced» нужно проделать тоже самое в файле main.php, который находится в папке «frontend/config», а в main.php, папки «backend/config», нужно еще изменить baseUrl:


'baseUrl' => '/admin'
Категория: Полезное
Теги: , , , , ,
Просмотров: 57
Комментариев нет

Вам будет интересно

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Больше похожих постов

Меню