@AlexSer

Как настроить yii2 advanced на ubuntu?

По запросу в URl
server/мой_сайт/frontend
запускает все нормально.
А вот если хочу зайти в админку
server/мой_сайт/admin
то не перекидывает.
С тем же .htaccess файлом в корне, OSpanel работает отлично, но на сервере Ubuntu не впускает в /admin.
Менял конфиг сайта в /etc/apache2 добавлял отдельный DocumentRoot /home/admini/lism.ru/backend/web
, но толку нет.
Вот .htaccess что в корне
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


.htaccess что в backend/web
# use mode 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


Конфиг Yii2 backend:
'homeUrl' => '/admin',
    'id' => 'app-backend',
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'backend\controllers',
    'bootstrap' => ['log'],
    'modules' => [],
    'components' => [
        'request' => [
            'baseUrl' => '/admin',
            'csrfParam' => '_csrf-backend',
        ],

В чем еще может быть проблема?
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
RootDirectory настраиваете на корень сайта, не на backend/web и не на frontend/web
В корне сайта .htaccess
RewriteEngine On

RewriteRule ^(frontend|backend)/web/ - [L]

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

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

В backend/config/main.php, в секцию request
'baseUrl' => '/admin'

Перейдя по адресу http://site.com попадёте на frontend, а по адресу http://site.com/admin - в админку.
Теперь, если захотите перенести сайт в поддиректорию, например subsite, адрес изменится на http://site.com/subsite.
Вносите изменения в .htaccess, который в корне сайта.
RewriteEngine On

RewriteRule ^(frontend|backend)/web/ - [L]

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

RewriteCond %{REQUEST_URI} ^/(subsite)
RewriteRule ^(.*)$ frontend/web/$1 [L]

В backend/config/main.php добавляете переменную $baseUrl
$baseUrl = str_replace('/backend/web', '', (new yii\web\Request)->getBaseUrl());

и подставляете в значение baseUrl
'baseUrl' => $baseUrl . '/admin'
В этом случае Вы не заморачиваетсь с названием поддиректории в которую перенесёте сайт, названия можете менять как угодно, но не забываете сменить название и в корневом .htaccess
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы