• Главная

Yii2. Как настроить .htaccess для advanced-шаблона? Yii2 htaccess для хостинга


.htaccess для Yii 2 - PandaTeam

Правильный .htaccess для basic и advanced приложения Yii 2.0. Думаю все кто начинал работать с Yii2 стыкались с такой «проблемой» как настройка apache под проект. Эта статья-шпаргалкой для тех кто знакомиться с Yii2. В статье я показал как самые примитивные решения так и альтернативные, а вы выбирайте которые вы будете использовать.

 

Для basic:

Шаг 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

RewriteEngine On RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.php

 

Шаг 3

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

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

'urlManager' => [

    'enablePrettyUrl' => true,

    'showScriptName' => false,

    'rules' => [

        '' => 'site/index',                                

        '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',

    ],

],

 

Альтернативный вариант для базового шаблона

Options +FollowSymLinks IndexIgnore **

RewriteEngine on

 

# Если запрос не начинается с web, добавляем его

RewriteCond %{REQUEST_URI} !^/(web)

RewriteRule (.*) /web/$1

 

# Если файл или каталог не существует, идём к /web/index.php

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /web/index.php

 

Для advanced:

Упрощенный вариант

Options +FollowSymLinks IndexIgnore **

RewriteEngine on

 

# Если запрос начинается с /admin, то заменяем на /backend/web/

RewriteCond %{REQUEST_URI} ^/admin

RewriteRule ^admin\/?(.*) /backend/web/$1

 

# Добавляем другой запрос /frontend/web/$1

RewriteCond %{REQUEST_URI} !^/(frontend/web|backend/web|admin)

RewriteRule (.*) /frontend/web/$1

 

# Если frontend запрос

RewriteCond %{REQUEST_URI} ^/frontend/web

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /frontend/web/index.php

 

# Если backend запрос

RewriteCond %{REQUEST_URI} ^/backend/web

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /backend/web/index.php...

Источник: http://mainview.ru/programming/yii/pravilnyj-htaccess-dlya-basic-i-advanced-prilozheniya-yii-2-0

 

Полная инструкция

Шаг 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>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

<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>

 

Где 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

RewriteEngine on

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

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

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

RewriteRule . index.php

Шаг 3

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

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

'request' => [

    'baseUrl' => '',

],

'urlManager' => [

    'enablePrettyUrl' => true,

    'showScriptName' => false,

    'rules' => [

        '' => 'site/index',                                

        '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',

    ],

],

Шаг 4

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

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

RewriteEngine on

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

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

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

RewriteRule . index.php

 

Шаг 5

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

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

'request' => [

    'baseUrl' => '/admin',

],

'urlManager' => [

    'enablePrettyUrl' => true,

    'showScriptName' => false,

    'rules' => [

        '' => 'site/index',                                

        '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',

    ],

],

 

www.pandateam.net.ua

.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>

Где 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

Шаг 3

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

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

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

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

Шаг 4

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

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

Шаг 5

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

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

Готово)

Автор

Yehor Rykhnov

Если у вас есть вопросы или предложения по улучшению кода описанного в статье пишите в комментариях. Я всегда открыт к конструктивному диалогу

xn--d1acnqm.xn--j1amh

.htaccess для Yii 2 basic

Пошаговая инструкция

Шаг 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

Options +FollowSymLinks

IndexIgnore ** RewriteEngine on # Если запрос начинается с /administrator, то заменяем на /backend/web/ RewriteCond %{REQUEST_URI} ^/administrator RewriteRule ^administrator\/?(.*) /backend/web/$1 # Добавляем другой запрос /frontend/web/$1 RewriteCond %{REQUEST_URI} !^/(frontend/web|backend/web|administrator) RewriteRule (.*) /frontend/web/$1 # Если frontend запрос RewriteCond %{REQUEST_URI} ^/frontend/web RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /frontend/web/index.php # Если backend запрос RewriteCond %{REQUEST_URI} ^/backend/web RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /backend/web/index.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

Options +FollowSymLinks

IndexIgnore */*

RewriteEngine on

# Если запрос начинается с /administrator, то заменяем на /backend/web/

RewriteCond %{REQUEST_URI} ^/administrator

RewriteRule ^administrator\/?(.*) /backend/web/$1

# Добавляем другой запрос /frontend/web/$1

RewriteCond %{REQUEST_URI} !^/(frontend/web|backend/web|administrator)

RewriteRule (.*) /frontend/web/$1

# Если frontend запрос

RewriteCond %{REQUEST_URI} ^/frontend/web

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /frontend/web/index.php

# Если backend запрос

RewriteCond %{REQUEST_URI} ^/backend/web

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /backend/web/index.php

Приведенный выше файл направит запросы, которые начинаются на ‘administrator’ в папку /backend/web/, а все остальные — в папку /frontend/web.Таким образом мы получаем желаемое — запросы к админке попадают по адресу.

  • Подобный подход позволяет обойтись без настройки директорий web. Но, на всякий случай, приведу код, который обеспечивает направлению входящего на эти папки запроса на файл index.php.

    RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php

    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule . index.php

    Вот и все. Теперь обращения к каждой из сущностей настроено.

    Похожие записи

  • onfor.info

    php - Yii2 htaccess - Как скрыть интерфейс /web и бэкэнд /web ПОЛНОСТЬЮ

    Я думаю, что я довольно близко. Я перенаправляю htaccess на веб-сайт (frontend/web) и путь /admin (backend/web). Сайт выглядит отлично, загрузка файлов CSS и т.д.

    Если вы переходите к: http://localhost/yii2app/ - он загружает домашнюю страницу и не перенаправляет ее в адресную строку, но на странице отображается интерфейс/сеть во всех URL.

    если вы перейдете к: http://localhost/yii2app/admin - он загружает страницу входа в систему, однако она сразу же перенаправляет на /backend/web/site/login в адресной строке (некрасиво).

    Проблема: пути frontend/backend отображаются в URL-адресах (адресная строка и ссылки на странице).

    Что мне нужно: я хочу, чтобы весь сайт работал без отображения интерфейсных/бэкэнд-ссылок. Корень проекта должен вытащить (невидимо) из frontend/web, не показывая его. Итак http://localhost/yii2app/ запускает весь мой интерфейс и http://localhost/yii2app/admin/ работает весь мой сервер.

    Почему? Я чувствую, что эта настройка будет довольно прочной и элегантной, когда вы будете жить на сервере. Я хочу, чтобы иметь возможность подталкивать мою папку проекта в реальном времени на сайт, и она работает отлично, без необходимости иметь хаки для обработки локального сервера vs.

    .htaccess файл в /yii2app dir:

    Options -Indexes RewriteEngine on <IfModule mod_rewrite.c> RewriteCond %{REQUEST_URI} !^/backend/web/(assets|css)/ RewriteCond %{REQUEST_URI} admin RewriteRule .* backend/web/index.php [L] RewriteCond %{REQUEST_URI} !^/(frontend|backend)/web/(assets|css)/ RewriteCond %{REQUEST_URI} !admin RewriteRule .* frontend/web/index.php [L] </IfModule>

    Теперь в интерфейсных и бэкэндовых веб-каталогах оба они имеют одинаковый .htaccess:

    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

    Я не хочу видеть /frontend/web или /backend/web когда-либо:)

    Я попытался сыграть с RewriteRule в корневом htaccess, чтобы добавить /admin в URL-адрес, но он все время говорил мне, что /admin не существует. Я ЗНАЮ, что этого не существует, и я не хочу, чтобы он существовал. Я хочу, чтобы это был относительный путь.. ie:/admin ==/backend/web.

    Слово другое. Я все в корне проекта (http://localhost/yii2app/) загрузил frontend/web, но не показывая его. Кроме того, http://localhost/yii2app/admin загрузить backend/web и просто показать http://localhost/yii2app/admin. Очевидно, что к ним присоединятся их controller/action. Таким образом, администратор может выглядеть как http://localhost/yii2app/admin/site/login

    ПРИМЕЧАНИЕ. Я не играл ни с одним из файлов. Это расширенная настройка yii2, использующая композитор и следуя документам. Единственное, что я сыграл до сих пор, - это упомянутые файлы htaccess.

    Спасибо!

    qaru.site

    Yii2 настройка. Настройка htaccess

    Yii2 настройка

    От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы поговорим о такой теме, как Yii2 настройка. Здесь мы рассмотрим различные настройки фреймворка: файл htaccess, настройки Apache и Nginx, конфигурация почты и т.д.

    В процессе работы с фреймворком Yii вам часто придется работать с различными настройками фреймворка. Поэтому в данной статье мы рассмотрим некоторые из них. Начнем с ряда настроек, с которыми вам придется столкнуться сразу после установки фреймворка.

    Как вы помните, публичной папкой фреймворка является папка web. Именно в нее нужно перенаправить все запросы. Как это сделать? Во-первых, можно воспользоваться возможностями файла htaccess. Для этого нам потребуется создать пару таких файлов. Первый файл мы поместим в корень Yii, а второй — в папку web. Далее нам необходимо будет добавить следующие строки кода в первый файл htaccess:

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

    RewriteEngine on

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

    Практический курс по верстке адаптивного лендинга с нуля!

    Научитесь с нуля верстать адаптивные лендинги на HTML5 и CSS3 за ближайшие 6 дней

    Узнать подробнее

    Эта настройка htaccess включит модуль Apache mod_rewrite и отправит все запросы в папку web. Ну а в файле htaccess из папки web мы напишем следующие строки:

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

    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule . index.php

    Эта настройка все запросы, которые не идут к реально существующим файлам и папкам, перенаправит на фронт-контроллер фреймворка — файл index.php. После этой настройки htaccess при обращении к корню сайта мы должны попасть на главную страницу. Напомню, по умолчанию, нам нужно обращаться для этого к папке web.

    При настройке Yii, особенно на реальном сервере, возможно не всегда получится использовать файл htaccess. В этом случае можно обратиться к настройке сервера. Суть такой настройки сводится к тому, чтобы изменить корневую директорию сервера и сделать так, чтобы корневой стала директория web.

    В документации на официальном сайте можно найти необходимые строки кода для настройки Apache и Nginx. Воспользуйтесь ими, чтобы произвести необходимую конфигурацию. Если вы не имеете доступа к настройкам сервера, тогда можно обратиться в поддержку вашего хостинга, как правило, саппорт помогает с такими вопросами.

    Это далеко не все настройки, с которыми вам придется столкнуться в процесс работы с фреймворком. Но это первые из них, которые вам потребуются уже на первом этапе работы, фактически сразу после установки. На этом сегодня все. Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.

    Фреймворк YII2: теория и первая практика

    Овладейте азами фреймворка Yii2 за 5 дней!

    Получить

    webformyself.com