[РЕШЕНО] Убрать /frontend/web/ из строки адреса

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Sasha_ch
Сообщения: 80
Зарегистрирован: 2011.04.10, 15:59
Контактная информация:

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение Sasha_ch »

осваиваюсь с Yii2 после yii 1)

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

есть на хостинге папка вашего хостинг аккаунта:
/somedir/username/
в которой хранятся папки с вашими доменами:
/somedir/username/domain.ru/
/somedir/username/domain.com/
/somedir/username/domain.org/

вам надо чтобы все сайты(они конечно все разные между собой) работали на yii2 (шаблон advanced)
на примере с доменом domain.ru:
/somedir/username/domain.ru_yii/ - сюда заливаем все содержимое yii2
/somedir/username/domain.ru/ - тут делаем симлинк на /somedir/username/domain.ru_yii/frontend/web

По поводу бэкенда, 2 варинта (кому что). Как по мне - субдомен.

1-ый. Субдомен. т.е. будет доступен как http://backend.domen.ru ...ну или как назовете субдомен.
/somedir/username/backend.domain.ru/ - тут делаем симлинк на /somedir/username/domain.ru_yii/backend/web

2-ой. В виде папки на том же домене. т.е. будет доступен как http://domen.ru/backend/ ...ну или как назовете "папку"
/somedir/username/domain.ru_yii/frontend/web/backend/ - тут делаем симлинк на /somedir/username/domain.ru_yii/backend/web

..для доменов "domain.com" и "domain.org" делаем аналогично.

Вариант пока только теоретический. Скоро думаю станет моим "практическим".
1. Из плюсов что я тут вижу - не нужно "издеваться )) " над yii2. Все можно сказать как и было из коробки, только обошли ограничения шаред хостинга.
2. Такая схема довольно гибкая, подойдет к любому шаред хостингу.
3. Можно как нужно обыграть симлинками ситуацию при нескольких сайтах на yii2 в одном аккаунте хостинга.


p.s. жду критических и положительных комментариев. Отпишите пожалуйста Ваше мнение.
Спасибо!
CPU comparison platform: CPU Boss Multi language, Yii2 powered.
niconphantom
Сообщения: 5
Зарегистрирован: 2014.10.29, 21:29

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение niconphantom »

Видимо я вчера погорячился подтвердив что мой .htaccess на странице 2 полностью рабочий ))) Доступ в админку не работает, 404. Вариант с субдоменом не всегда хорошое решение, особенно если есть недорогой SSL сертификат без wildcard. Есть ли у кого рабочий вариант .htaccess и конфигов такого плана когда всё в подпапке?

http://localhost/test/ - для фронтенда
http://localhost/test/admin/ - для backenda

Вижу что данная тема поднимается на форумах не раз. Хороший, рабочий пример будет весьма полезен для тех кто только начинает знакомится с Yii2.

Заранее спасибо!
niconphantom
Сообщения: 5
Зарегистрирован: 2014.10.29, 21:29

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение niconphantom »

В общем в итоге победил с минимальной необходимостью .htaccess таким образом:

Frontend:

Будет доступен в стиле http://localhost/test (ну или в зависимости от названия подпапки, в примере ниже нужно будет заменить test на то что надо)

1. Перемещаем index.php из /frontend/web в корень папки test
2. Изменяем пути в index.php таким образом:

Код: Выделить всё

<?php
defined('YII_DEBUG') or define('YII_DEBUG', false);
defined('YII_ENV') or define('YII_ENV', 'prod');

require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/common/config/bootstrap.php');
require(__DIR__ . '/frontend/config/bootstrap.php');

$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/common/config/main.php'),
    require(__DIR__ . '/common/config/main-local.php'),
    require(__DIR__ . '/frontend/config/main.php'),
    require(__DIR__ . '/frontend/config/main-local.php')
);

$application = new yii\web\Application($config);
$application->run();
3. Изменяем frontend/config/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' => [
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            //'suffix' => '.html',
            'rules' => [
                '' => 'site/index',
                
                
                '<action>'=>'site/<action>',
            ],
        ], 
         'assetManager' => [
             'basePath' => '@webroot/frontend/web/assets',
             'baseUrl' => '@web/frontend/web/assets'
        ],  
        'request' => [
            'baseUrl' => '/test'
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
    ],
    'params' => $params,
    
];
4. В корень папки test добавляем .htaccess чтобы не использовать scriptname (index.php):

Код: Выделить всё

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
Backend

1. Переносим index.php из /backend/web на одну папку назад (т.е прямо в  backend)
2. Изменяем содержимое файла на:

Код: Выделить всё

<?php
defined('YII_DEBUG') or define('YII_DEBUG', false);
defined('YII_ENV') or define('YII_ENV', 'prod');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../common/config/bootstrap.php');
require(__DIR__ . '/config/bootstrap.php');

$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../common/config/main.php'),
    require(__DIR__ . '/../common/config/main-local.php'),
    require(__DIR__ . '/config/main.php'),
    require(__DIR__ . '/config/main-local.php')
);

$application = new yii\web\Application($config);
$application->run();
3. Изменяем backend/config/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-backend',
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'backend\controllers',
    'bootstrap' => ['log'],
    'modules' => [],
    'components' => [
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            //'suffix' => '.html',
            'rules' => [
                '' => 'site/index',
                
                
                '<action>'=>'site/<action>',
            ],
        ], 
         'assetManager' => [
             'basePath' => '@webroot/web/assets',
             'baseUrl' => '@web/web/assets'
        ],  
        'request' => [
            'baseUrl' => '/test/backend'
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
    ],
    'params' => $params,
];
4. В корень папки /backend добавляем .htaccess  как для фронтенда:

Код: Выделить всё

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
Готово!

Frontend: http://localhost/test
Backend: http://localhost/test/backend

Все работает включая ссылки и стили. Ругайте если что не так )))
niconphantom
Сообщения: 5
Зарегистрирован: 2014.10.29, 21:29

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение niconphantom »

Заметил что не работает дебаггер, вместо панели вижу "Bad Request (#400): Missing required parameters: tag" и соответственно если меняю в конфиге 'enablePrettyUrl' => false, то дебаггер панель работает нормально. Есть идея в чем может быть дело и не бага ли это?
geniy
Сообщения: 62
Зарегистрирован: 2014.03.17, 17:02
Контактная информация:

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение geniy »

а где у вас коннект к базе данных?:)
wpd
Сообщения: 161
Зарегистрирован: 2014.08.22, 12:34
Контактная информация:

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение wpd »

Почему нельзя в офф. документации выложить правильный пример htaccess . Если это настолько обсуждаемый вопрос на всех форумах ? :) Для бэйсика и адванседа.
Download TV Series in HD http://serialsfree.net/
antoncrimea
Сообщения: 12
Зарегистрирован: 2015.01.26, 16:50

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение antoncrimea »

Вопрос такой. Сделал в корне сайта .htaccess такой:

Код: Выделить всё

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
в самой папке web такой:

Код: Выделить всё

RewriteEngine On RewriteBase /

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php
сайт завелся, только когда ходиш по ссылкам - всегда главная страница, хотя сама урл меняется

конфиг такой:

Код: Выделить всё

...
'db' => require(__DIR__ . '/db.php'),
        'urlManager' => [ 
         'enablePrettyUrl' => true, 
         'showScriptName' => false, 
         'rules' => [
            '<alias:home|feedback|login|logout>' => 'site/<alias>',             
        ],
...
 
если в урл добавлять все тот же web - то все ок.

что нужно изменить?
antoncrimea
Сообщения: 12
Зарегистрирован: 2015.01.26, 16:50

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение antoncrimea »

нужно было добавить baseUrl - заработало
malivadim
Сообщения: 23
Зарегистрирован: 2015.10.19, 15:58

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение malivadim »

Не получается сделать ссылки вида site.ru/about:
Проект advanced на локальном сервере Openserver 5.2.2
выставлен apache 2.4
в настройках доменов Openservera:
site.ru -----> папка домена yii2/advanced

В браузере захожу на сайт так: site.ru
в админку попадаю так: site.ru/admin, но при этом адрес становится таким site.ru/backend/web/index.php/site/login

Когда включаю 'enablePrettyUrl' => true, то все работает, и ссылки вида site.ru//frontend/web/index.php/about
но мне нужно убрать frontend/web из адреса и имя скрипта.

Когда ставлю 'showScriptName' => false, ссылки становятся нужного вида site.ru/contact но при переходах по ссылкам вылетает:

"Object not found!
The requested URL was not found on this server. The link on the referring page seems to be wrong or outdated. Please inform the author of that page about the error.

If you think this is a server error, please contact the webmaster.

Error 404"


Вот мои настройки:

файл frontend/config/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__),
        'language'=>'ru-RU',
    'bootstrap' => ['log'],
    'controllerNamespace' => 'frontend\controllers',
    'components' => [
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            //'suffix' => '.html',
            'rules' => [
                '' => 'site/index',
                
                
                '<action>'=>'site/<action>',
            ],
        ], 
         'assetManager' => [
             'basePath' => '@webroot/assets',
             'baseUrl' => '@web/assets'
        ],  
        'request' => [
            'baseUrl' => ''
        ],
         
    ],
    'params' => $params,
    
]; 
мой .htaccess в frontend/web:

Код: Выделить всё

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

Код: Выделить всё

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

    RewriteCond %{REQUEST_URI} !^/backend/web/(assets|css)/
    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>
Что я упустил?
Евгений Емельянов
Сообщения: 167
Зарегистрирован: 2015.06.10, 10:43

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение Евгений Емельянов »

А в настройках OpenServer'а домен кажется лучше по-другому создать.
Ну например, так: домен - site.ru, папка домена - site.ru\www\frontend\web
Это проще, чем такой .htaccess и много правил. Из .htaccess можно только в админку направлять...
Например:

Код: Выделить всё

...
RewriteCond %{HTTP_HOST} ^(site.ru/admin)$ [NC]
RewriteCond %{REQUEST_URI} !^/backend/web
RewriteRule (.*) backend/web/$1
... 
На продакшене тоже корень для сайта укажете как в настройках OpenServera
malivadim
Сообщения: 23
Зарегистрирован: 2015.10.19, 15:58

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение malivadim »

А в настройках OpenServer'а домен не проще создать?
Ну например, так: домен - site.ru, папка домена - site.ru\www\frontend\web
Это проще, чем такой .htaccess и много правил. Из .htaccess можно только в админку направлять...
Например:
КОД: ВЫДЕЛИТЬ ВСЁ
...
RewriteCond %{HTTP_HOST} ^(site.ru/admin)$ [NC]
RewriteCond %{REQUEST_URI} !^/backend/web
RewriteRule (.*) backend/web/$1
...

На продакшене тоже корень для сайта укажете как в настройках OpenServera
попробовал, в frontend'е работает но с 'showScriptName' => true, а в админку не попадает.
Если у меня корневая директория будет в site.ru/frontend/web , вопрос: .htaccess разве сможет перенаправить меня на два уровня выше?
Последний раз редактировалось malivadim 2015.11.22, 10:06, всего редактировалось 1 раз.
Евгений Емельянов
Сообщения: 167
Зарегистрирован: 2015.06.10, 10:43

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение Евгений Емельянов »

Ну вообще-то да, не сможет. Тогда либо для админки тоже создавать домен в OpenServer. Либо описывать правила в корневом .htaccess
Евгений Емельянов
Сообщения: 167
Зарегистрирован: 2015.06.10, 10:43

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение Евгений Емельянов »

У меня админка на поддомене и я имею такой .htaccess - переделать под Ваши нужды, думаю не сложно:

Код: Выделить всё

    # Запросы на админку
    RewriteCond %{HTTP_HOST} ^admin\.(.*)$ [NC]
    RewriteCond %{REQUEST_URI} !^/backend/web
    RewriteRule (.*) backend/web/$1

    # Запросы на основной сайт
    RewriteCond %{HTTP_HOST} ^(site\.ru)$
    RewriteCond %{REQUEST_URI} !^/frontend/web
    RewriteRule (.*) frontend/web/$1
Этот - лежит в корне, и в frontend и в backend лежат соответственно файлы:

Код: Выделить всё

Order Allow,Deny
Allow from all
AddDefaultCharset utf-8
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
malivadim
Сообщения: 23
Зарегистрирован: 2015.10.19, 15:58

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение malivadim »

Спасибо! Пригодится. Пробовал на поддомене админку(admin.site.ru), получается.
Но решил сделать site.ru/admin.

Только для того чтобы в админке все работало (ссылки вида: site.ru/admin/users/index) нужно добавить

'request' => [
'baseUrl' => '/admin'
],
malivadim
Сообщения: 23
Зарегистрирован: 2015.10.19, 15:58

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение malivadim »

В общем проблема решилась. Я .htaccess поместил оказывается не в frontent(backend)/web, а просто в frontend(backend).
Аватара пользователя
matios
Сообщения: 76
Зарегистрирован: 2013.03.17, 20:44
Откуда: Россия, Лиски

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение matios »

Вот и все
Изображение
maxkp
Сообщения: 7
Зарегистрирован: 2015.08.26, 11:02

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение maxkp »

Добрый день!
Утром была проблема с отправкой почты (форма обратной связи), однако как оказалось проблема совсем была не в этом. Форма исправно работала, только никто не знал об этом. А суть была в .htaccess.
Есть ряд хостингов, в т.ч. которым я пользуюсь, у них нельзя разместить сайты в папку, отличную от www. На сайте того хостинга есть пример .htaccess, который я по простоте душевной решил себе скопировать. Т.к. хотелось делать локально точно также, как потом будет на хостинге.
Вот тот самый .htaccess

Код: Выделить всё

DirectoryIndex /public/index.php

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f

RewriteRule ^(.+) $1 [L]

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f

RewriteRule ^(.+) /public/$1 [L]
Локально, на Опен сервере это не работает. Помогло решение (вычитал в этой теме) - перенести индексный файл из папки web в корень сайта. У меня шаблон - basic. туда же в корень сайта добавил новый htaccess (тоже нашел в этой же теме):

Код: Выделить всё

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L] 
Нюансы:
- Пришлось в файле AppAsset.php изменить строки:

Код: Выделить всё

public $basePath = '@webroot/web';
    public $baseUrl = '@web/web'; 
и пути к картинкам прописывать по типу: web/img/logo.png. Все работает. Надеюсь. Просьба, если в этих действиях кроется ошибка, подскажите. Если нормально, может кому-то пригодится, кто также мучился :)
Последний раз редактировалось maxkp 2016.01.01, 13:43, всего редактировалось 1 раз.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение ElisDN »

maxkp писал(а):у них нельзя разместить сайты в папку, отличную от www.
Переименуйте папку web в www и пользуйтесь.
maxkp
Сообщения: 7
Зарегистрирован: 2015.08.26, 11:02

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение maxkp »

ElisDN писал(а):
maxkp писал(а):у них нельзя разместить сайты в папку, отличную от www.
Переименуйте папку web в www и пользуйтесь.
В принципе так можно, делал. Но бывают случаи когда на одном хостинге размещают более одного проекта. Ну или основной сайт и какие-то поддомены, для тестов (экспериментов), кому что угодно. В моем случае хостинг предлагает структуру example.com/www/. В папке www размещается содержимое сайта, который доступен по ссылке

Код: Выделить всё

http://example.com 
. Можно перенести в папку example.com файлы фреймворка, а веб-папку переименовать. Все будет работать. Но если мы хотим разместить поддомен, то размещаем его тоже в папке example.com/site2. И он нам доступен по ссылке

Код: Выделить всё

http://site2.example.com 
. Мне кажется, если нужно на хостинге еще что разместить, то в таком случае будет каша. Если размещаем один проект, то конечно, чем изголяться с htaccess, проще переименовать web в www. Но бывают разные ситуации, как я описал выше. В принципе тоже не проблема, но тогда папки поддоменов будут путаться с папками фреймворка.
Аватара пользователя
vitovt
Сообщения: 210
Зарегистрирован: 2012.03.21, 10:37
Контактная информация:

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение vitovt »

Тоже только изучаю yii2 (перешл с 1го)
Для себя делаю такую структуру проекта.

сам сайт лежит в папке /home/sites/example.com/www

т.е если в папку www положить file.php то он извне будет доступен как example.com/file.php

Значит залил я advanced на хостинг в корень (в папку www) и получилась такая структура

- api
- backend
- console
- common
- enviroments
- frontend
.....
.htaccess

в самом htaccess прописано пока что так:

Код: Выделить всё

Options FollowSymLinks
AddDefaultCharset utf-8

<IfModule mod_rewrite.c>
    RewriteEngine On

    # the main rewrite rule for the frontend application
    RewriteCond %{REQUEST_URI} !^/(backend/web|myadmin)
    RewriteRule !^frontend/web /frontend/web%{REQUEST_URI} [L]

    # redirect to the page without a trailing slash (uncomment if necessary)
    #RewriteCond %{REQUEST_URI} ^/admin/$
    #RewriteRule ^(admin)/ /$1 [L,R=301]
    # the main rewrite rule for the backend application
    RewriteCond %{REQUEST_URI} ^/myadmin
    RewriteRule ^myadmin(.*) /backend/web/$1 [L]

    # if a directory or a file of the frontend application exists, use the request directly
    RewriteCond %{REQUEST_URI} ^/frontend/web
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # otherwise forward the request to index.php
    RewriteRule . /frontend/web/index.php [L]

    # if a directory or a file of the backend application exists, use the request directly
    RewriteCond %{REQUEST_URI} ^/backend/web
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # otherwise forward the request to index.php
    RewriteRule . /backend/web/index.php [L]

    RewriteCond %{REQUEST_URI} \.(htaccess|htpasswd|svn|git)
    RewriteRule \.(htaccess|htpasswd|svn|git) - [F]
</IfModule>

соответственно если зайти на example.com - то запускается скрипт www/frontend/web/index.php

если зайти example.com/myadmin - то www/backend/web/index.php

еще будет АПИ, для него создадуться новые правила в htaccess



Чтобы админка открывалась как надо в backend/config/main.php прописано так

Код: Выделить всё

return [
    'id' => 'app-backend',
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'backend\controllers',
    'bootstrap' => ['log'],
    'modules' => [],
    'components' => [
        'request' => [
            'csrfParam' => '_csrf-backend',
            'baseUrl' => '/myadmin'
        ],
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
            'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
        ],
        'session' => [
            // this is the name of the session cookie used for login on the backend
            'name' => 'advanced-backend',
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],

        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
            ],
        ],
        'assetManager' => [
            'basePath' => '@webroot/assets',
            'baseUrl' => '@web/assets'
        ],

    ],
    'params' => $params,
];

Вроде пока все, можно сказать это первичные настройки. Если что-то делаю не так - поправьте ) Хочется сразу продуманную структуру сделать чтоб при росте проекта не переделывать.
Ответить