Пошаговая инструкция
Шаг 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>', ], ],
Готово)
Комментарии
Привет!
ОтветитьПодскажи, какое правило надо прописать, что бы иметь доступ к общей папке files, которая лежит рядом с backend и frontend:
-backend
-frontend
-files
-common
-vendor
Правильно ли я понимаю из поста, что надо прописать так?:
RewriteCond %{REQUEST_URI} ^/(files)
RewriteRule ^static/(.*)$ files/$1 [L]
вроде работает, но может что-то слоамлось? или это не правильно?
Я бы создал символичскую ссылку на директорию
Ответитьln -s /path_to_folder /path_from_folder_link
Это да. Но, а если учесть, что дома разработка идет под windows, а проект будет жить на обычном хостинге, то этот вариант, к сожалению, отпадает :(
Ответитьне беда)
ОтветитьДиректива Alias позволяет незаметно для клиентов связывать запрашиваемые URL с любой частью файловой системы сервера. Например:
Alias /images/ /ftp/public/images/
Директива в примере выше приведёт к тому, что Apache перед тем, как выполнять поиск контента в файловой системе, в строке запроса заменит /images/ на /ftp/public/images/. Таким образом запрос URL http://www.example-domain.com/images/example-image.jpg заставит искать Apache файл example-image.jpg в физическом каталоге /ftp/public/images/ вместо каталога DOCUMENT_ROOT/images.
Прописывается в виртуал хосте например
XAMPP v.3.2.2 -> после добавления 'baseUrl' => '', (шаг 3), выдает ошибку 404:
ОтветитьToggle navigation My Company
Home
About
Contact
Signup
Login
Not Found (#404)
Page not found.
The above error occurred while the Web server was processing your request.
Please contact us if you think this is a server error. Thank you.
© My Company 2016
Powered by Yii Framework
Yii2 v.2.0.9
Ответитьmain.php:
<?php
$params = array_merge(
require(__DIR__ . '/../../common/config/params.php'),
require(__DIR__ . '/../../common/config/params-local.php'),
require(__DIR__ . '/params.php'),
require(__DIR__ . '/params-local.php')
);
return [
'id' => 'app-frontend',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'controllerNamespace' => 'frontend\controllers',
'components' => [
'request' => [
'csrfParam' => '_csrf-frontend',
'baseUrl' => '',
],
'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => true,
'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
],
'session' => [
// this is the name of the session cookie used for login on the frontend
'name' => 'advanced-frontend',
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'errorHandler' => [
'errorAction' => 'site/error',
],
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'' => 'site/index',
'<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
],
],
],
'params' => $params,
];
РЕШЕНО!
Ответить(фреймворк установлен в директорию C:\xampp\htdocs\yii209\), внесены изменения:
'baseUrl' => '/yii209',
РЕЗУЛЬТАТ нормально отображается по следующим адресам:
http://localhost/yii209/
http://localhost/yii209/about
http://localhost/yii209/contact
http://localhost/yii209/signup
http://localhost/yii209/login
Спасибо тебе, emsi. Я уже 2 дня убила на эту проблему, весь интернет перерыла. Попробовала, как ты написал и у меня так тоже заработало! Respect
ОтветитьПрошло два года, а Ваш комментарий всё еще спасает жизни, присоединяюсь к Анне - огромное спасибо!
ОтветитьПочему то у меня не получается (
ОтветитьПри такой конфигурации htaccess в ассеты не может попасть
http://ipic.su/ans7Q.png
Попробуйте в корень добавть .htaccess с таким содержанием:
Ответить<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
</IfModule>
<IfModule mod_rewrite.c>
# deal with admin first
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|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>
Уважаемый у вас виндовс, могут быть проблемы в слешах путей
ОтветитьНашлось ли решение данной проблемы?
ОтветитьА это: кодер.укр/записи/htaccess-для-yii-2-advanced#426 не помогло?
ОтветитьИли это кодер.укр/подсказки/yii2-advanced-быстрая-установка-и-настройка
ОтветитьК сожалению, нет.
ОтветитьТак и продолжает выдавать http://prntscr.com/d01zqq
Позже попробую на другом сервере запустить, если отработает как надо - напишу.
На домашнем OpenServer запустил по этой инструкции
Ответитькодер.укр/подсказки/yii2-advanced-быстрая-установка-и-настройка
Все заработало!
Не знаю даже в чем была причина, благодарю за помощь.
Замечательный htaccess, работает. Но при нём в конфиге не срабатывает defaultRoute. Есть какое лекарство?
ОтветитьХотя, нет, прошу прощения, протупил. defaultRoute не срабатывал из-за rules в urlManager
ОтветитьОгромное спасибо за развернутый ответ. Очень помогло.
ОтветитьПосле настройки frontend без проблем работает а когда набераю в браузере название-сайта/admin то отображается backend но без css (стилей). но я сразу понял что Asset не подключен вы не подскажите что делать в таком случае?
ОтветитьКакой путь в исходном коде к стилям?
ОтветитьСделал все по Вашим статьям, но...
Ответитьsite.loc, admin.site.loc открываются без ассетов, а site.loc/admin выдает 500 ошибку.
Логи чистые
Ставил на Ubuntu + Apache2. Mod rewrite включен
Установил все с нуля, получил ошибку: "The file or directory to be published does not exist:\...", но она вызвана не из-за инструкции, а из-за нехватки пакетов при установки или еще какой-то фигни. Все заработало после выполнения 2 команд:
ОтветитьСпасибо огромное, все сразу работает без танцев с бубном! Но вот как быть, если сайт на HTTPS?
ОтветитьА в чем проблема, будет работать одинаково как на http так и на https
ОтветитьПодскажите, каков должен быть файл, для магазина на Юпи! (Yii-магазин), чтобы при переходе на сайт сразу открывался store, а не блог?
ОтветитьСпасибо автору !!! Жив буду - не забуду:
Ответитьдля версии 2.0.12 в htaccess для frontend нужно немножко подправить
иначе выдаст Object not found! на вкладках кроме главнойОтветитьkak пройти backend advanced/admin не poluchitsya
Ответитьздравствуйте подскажите почему после установки шаблона не открываеться бекенд такая ошибка Forbidden (#403) Login Required
ОтветитьThe above error occurred while the Web server was processing your request.
Please contact us if you think this is a server error. Thank you. почему???
Что то у меня Ваше решение не заработало.
Пришлось немного подкорректировать:
В главном .htaccess файле:
В frontend/.htaccess файле:
В backend/.htaccess файле:
Далее в main.php для frontend
В main.php для backend
Ответить
Все заработало. Спс. До сих пор не могу понять, почему создатели фреймворка до сих пор не могут его по дефолту настроить как надо, чтоб каждый раз после установки через композер не надо было танцевать с этими бубнами или по копирке переделывать?
ОтветитьПотому что в разных средах может запускаться фреймворк(: и потому приходится настраивать под конкретную исполняемую среду(:
Ответитьу меня тоже был такоя проблема.
Ответитьесли у вас в проекте в frontend/web и в backend/web нет index.php значет вам надо
1)Просто нодо инсталироват PHP7 http://kizu514.com/blog/install-php7-and-composer-on-windows-10/
2)из командной строки вызвать Your project >php init
Большое спасибо!
ОтветитьСпасибо за статью очень помог но у меня не работает модуль во фротенде
ОтветитьЧто надо подправить?