YII 2 ADVANCED .htaccess - пример правильной настройки


Долго бился над правильной настройкой .htaccess файла для расширенного (advanced) шаблона YII2 Framework.

Наконец сумел это сделать по правильному.

Забегая в перёд, сразу скажу что этот вариант подходит ТОЛЬКО для настройки сайта в корне сервера. Если вас интересует настройка в поддиректории, то вам сюда.

Вот что у меня получилось:

  • Редактируем advanced/backend/config/main.php файл и добавляем в него:
return [
    'homeUrl' => '/admin',
    'components' => [
        'request' => [
            'baseUrl' => '/admin',
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
        ],
    ],
];

Теперь по ссылке http://site.ru/admin/ - сможем попасть в backend приложения.

  • Аналогично изменяем конфигурационный файл frontend приложения - advanced/frontend/config/main.php
return [
    'homeUrl' => '/',
    'components' => [
        'request' => [
            'baseUrl' => '',
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
        ],
    ],
];

Теперь по ссылке http://site.ru/ - сможем попасть во frontend/web/

  • Теперь настроем Web-север. У меня это Apache 2.2.
  • Создаем .htaccess файл в корне:
AddDefaultCharset UTF-8

Options -Indexes

RewriteEngine On

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

RewriteCond %{REQUEST_URI} ^/
RewriteRule ^(\/?.*)$ frontend/web/$1 [L]
  • Создаем 2 одинаковых .htaccess файла и копируем их в advanced/backend/web и advanced/frontend/web
# use mod_rewrite for pretty URL support
RewriteEngine on
# if a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward the request to index.php
RewriteRule . index.php

Готово! Тепрь http://site.ru/ будет вести в frontend/web/index.php, а http://site.ru/admin в backend/web/index.php.

Если необходимо держать сайт в поддиректории, то в этом случае нужно слегка модифицировать .htaccess файл. Если нужно, пишите в комментариях, отвечу.

 


Тэги:

Комментарии: 26

Прокомментировать »

 
 
andrey
23.02.2016
 

Надо ли говорить, что нихрена не работает?

lavrik
23.02.2016
 

Надо говорить какая у вас ошибка, а не "ничего не работает".

поверьте мне, абсолютное большинство ошибок возникает из-за невнимательности или неумения читать документацию.

Это моя личная статья "напоминалка". Я по ней уже несколько десятков раз разворачивал проекты. Готов поспорить, что вы просто не внимательно все сделали.

Антоныч
26.02.2016
 

Как бы да - не пашет пример.

ValRus
27.02.2016
 

Огромное спасибо. Все отлично работает.

lavrik
27.02.2016
 

Как вариант, причина по которой может не работать - проект не в корне сайта. Как видно из .htaccess, сайт должен лежать в корне, иначе .htaccess нужно слегка модифицировать.

Lola
29.02.2016
 

Получилось, но не то. :) Пр всем ссылкам видна одна главная страница. Но все эти frontend/web восстанавливаются пир кликании на пункты меню.

lavrik
29.02.2016
 

Lola - не совсем понял вашу проблему. но судя по всему у вас проблема в контроллере. htaccess тут не причем.

lavrik
29.02.2016
 

Выложил новый .htaccess. Теперь ему не важно в лежит ли сайт в директории или поддиректории. Главное не забывать исправить baseUrl и homeUrl в конфигах. Лично все протестировал - РАБОТАЕТ!

Николай
1.04.2016
 

Первый рабочий пример из 5 опробованных! Спасибо большое!

Гульнара
11.04.2016
 

Все отлично работает, СПАСИБО!!!!!

Андрей
19.04.2016
 

Доброго времени суток! Подскажите если фреймворк лежит не в корне сайта а по пути сайт.ru/www/(файлы фрейморка), как подправить правильно baseUrl и homeUrl в конфигах, чтобы все заработало. Заранее спасибо )

Андрей
19.04.2016
 

или в данном случае все же надо редактировать .htaccess, если да то как?

LAVRIK
20.04.2016
 

Для настройки сайта в поддиректории, я накидал статью тут - http://lavrik-v.ru/info/265/Yii2_framework_nastrojka_htaccess_kogda_sajt_ne_v_korne.html

emsi
23.06.2016
 

может вопрос не по теме раздела, но не могу понять, как подключить БД к Yii2 advanced на хостинге? в какие файлы какие внести изменения? Хост: xxx.mysql.ukraine.com.ua Логин: xxx_yii Пароль: xxxxxx

LAVRIK
23.06.2016
 

emsi, в common/config/main.php, в components добавь: 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=xxx.mysql.ukraine.com.ua;dbname=yii2_insurance', 'username' => 'xxx_yii', 'password' => 'xxxxxx', 'charset' => 'utf8', ],

and_y87
5.07.2016
 

Всё работает! Спасибо! Кто не разобрался как это сделать, читайте внимательнее! Всё супер!

Prokosa Vyacheslav
30.07.2016
 

Туфта нерабочая, если не рубишь зачем дезу льешь

LAVRIK
30.07.2016
 

Вячеслав, а может у кого-то ручки не оттуда растут? До вас много у кого получилось. Я и сам отсюда копирую когда разворачиваю новый проект.

Umid
21.08.2016
 

Все работает отлично ...

Umid
21.08.2016
 

А как настроить с мултиланг ... допустим site.ru/en site.ru/en/news для таких случаи как насторить ?

Имя
5.09.2016
 

Блять, а где для basic? Почему по уму сразу нельзя указать, во-вторых, где поиск по сайту, что за долбоебизм

LAVRIK
6.09.2016
 

В этой статье нет примера для basic потому, что это статья про advanced. По моему очевидно. А поиск по сайту, обычным людям заменяет google.com. Написать вам статью, как пользоваться гуглом?

demo
19.09.2016
 

Большое спасибо за подробную инструкцию! Всё отлично работает.

Александр
18.01.2017
 

Если выдает Forbidden You don't have permission to access / on this server. Добавьте в начало каждого файла .htacces Options +FollowSymLinks

Максат
23.04.2017
 

Ты лучший !!!

Максим
14.10.2017
 

Настраивал на Basic нужна была только эта строка: "RewriteRule (.*) /web/$1" ОГРОМНОЕ СПАСИБО!

 

Прокомментировать

 
 
Сообщение *
 
Проверочный код *
 
 
 
Яндекс.Метрика