Никак не могу настроить URLы в advanced

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
NikitaDrugoy
Сообщения: 17
Зарегистрирован: 2015.03.27, 18:14

Никак не могу настроить URLы в advanced

Сообщение NikitaDrugoy »

Всем привет. Полдня бьюсь с урлами в advanced приложении на хостинге. Frontend часть работает нормально. Админка должна открываться по site.ru/admin, но выдает 404 ошибку. При чем ссылки от админки я вижу, но все это отображается в layout от фронтенда. Ну и ссылки которые там видно -- с неправильными УРЛами (то есть вместо site.ru/admin/site/login там просто site.ru/site/login.
Перелопатил и перепробовал множество конфигов которые нашел в разных статьях -- ничего не помогает. .htaccess скорее всего правильный, потому что открывается backend/web/index.php - это проверено. Помогите советом или скажите что я не так делаю, пожалуйста. Спасибо.


Вот конфиги:

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,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'request' => [
            'baseUrl' => '',
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '' => 'site/index',
                '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
            ],
        ],
    ],
    'params' => $params,
];
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,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'request' => [
            'baseUrl' => '/admin',
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '' => 'site/index',
            ],
        ],
    ],
    'params' => $params,
];
.htaccess

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

Options -Indexes
IndexIgnore */*

Options +FollowSymLinks
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
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Никак не могу настроить URLы в advanced

Сообщение andku83 »

добавьте [L]

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

RewriteRule ^admin\/?(.*) /backend/web/$1 [L]
и вот эти блоки:

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

# Если 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
должны быть в соответствующих /frontend/web/.htaccess и /backend/web/.htaccess
без строчек

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

RewriteCond %{REQUEST_URI} ^/frontend/web
RewriteCond %{REQUEST_URI} ^/backend/web
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Никак не могу настроить URLы в advanced

Сообщение andku83 »

или просто как должно быть:
/.htaccess

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

# Mod_Autoindex
<IfModule mod_autoindex.c>
    # Disable Indexes
    Options -Indexes
</IfModule>

# Mod_Rewrite
<IfModule mod_rewrite.c>
    # Enable mod_rewrite
    RewriteEngine On

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

    # Frontend redirect
    RewriteCond %{REQUEST_URI} ^(.*)$
    RewriteRule ^(.*)$ frontend/web/$1
</IfModule>
/frontend/web/.htaccess и /backend/web/.htaccess одинаковые

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

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Последний раз редактировалось andku83 2018.02.20, 14:19, всего редактировалось 1 раз.
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Никак не могу настроить URLы в advanced

Сообщение Dominus »

Можете глянуть мою конфигурацию:
frontend/config/main
https://github.com/Dominus77/yii2-advan ... g/main.php

backend/config/main
https://github.com/Dominus77/yii2-advan ... g/main.php
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
NikitaDrugoy
Сообщения: 17
Зарегистрирован: 2015.03.27, 18:14

Re: Никак не могу настроить URLы в advanced

Сообщение NikitaDrugoy »

Пробую все что вы пишете - ничего не меняется. по прежнему frontend работает нормально. Когда открываю /admin - получаю 404 во фронтовом лейауте с кривыми ссылками на разделы админки :(((
Боль....

Проблема именно где-то в конфигах фреймворка. параметр baseUrl вообще не влияет ни на что. Меняю как угодно - все то же самое.
NikitaDrugoy
Сообщения: 17
Зарегистрирован: 2015.03.27, 18:14

Re: Никак не могу настроить URLы в advanced

Сообщение NikitaDrugoy »

Добавил 'baseUrl' => '/admin' в urlManager в конфиг бекенда. Теперь ссылки изменились, но выглядят вот так: site.ru/admin/admin/something. Лишний admin в адресе. может быть если понять откуда он взялся то станет ясно. Сейчас буду трейсить ядро фреймворка.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Никак не могу настроить URLы в advanced

Сообщение andku83 »

в урл менеджере он нужен в том случае если у вас basic
в вашем случае он должен присутствовать в конфиге бекенда в request и в приведеном выше вами конфиге он там был
NikitaDrugoy
Сообщения: 17
Зарегистрирован: 2015.03.27, 18:14

Re: Никак не могу настроить URLы в advanced

Сообщение NikitaDrugoy »

shnir писал(а): 2018.02.20, 15:30 в урл менеджере он нужен в том случае если у вас basic
в вашем случае он должен присутствовать в конфиге бекенда в request и в приведеном выше вами конфиге он там был
Но почему-то не работает :)
mikolyk
Сообщения: 1
Зарегистрирован: 2018.03.01, 16:21

Re: Никак не могу настроить URLы в advanced

Сообщение mikolyk »

Добрый день!

Не буду плодить темы, напишу тут.
Настройка урлов это вообще какая то адовая вещь.
Установка и настройка по мануалу проходит как по маслу. Но урлы это что то. При чем нет нормальных рабочих решений. С эмоциями закончил ;)

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

Задача
- Должны работать ссылки вида http://domain.com/{controller}/{action} при наборе в адресной строке
- backend доступен по адресу http://domain.com/admin/{controller}/{action}
- Избавиться от frontend/backend в генерации ссылок



Решение (не рабочее пока):
На только что установленной yii2 advanced:
1 - .htsccess - в корневую папку где лежит composer.json (что в .htsccess? )

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

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 - .htsccess - в папки frontend/web и backend/web (что в .htsccess? )

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

# 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
3. - меняем frontend/config/main.php

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

   'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' =>[
                '' => 'site/index',
                '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
            ],
        ],
В данном решении работает::

- http://domain.com - отображает главную страницу
- http://domain.com/admin - поподаем на backend/web на главную

В данном решении не работает::
- http://domain.com/site/contact - перенаправляет на главную (хотя бы уже ошибку не выдает)
- ссылки в меню имеют вид http://domain.com/frontend/web/site/about а должно быть http://domain.com/site/about

Прошу помощи как решить дву последних
Заранее благодарен!
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Никак не могу настроить URLы в advanced

Сообщение Nex-Otaku »

Инструкция сто лет уже есть. https://github.com/mickgeek/yii2-advanc ... ain-config

Скорее всего вы забыли прописать "baseUrl".

backend/config/main.php

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

    'components' => [
        'request' => [
            ...
            'baseUrl'=>'/admin',
        ],
frontend/config/main.php

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

    'components' => [
        'request' => [
            // Избавляемся от /frontend/web
            'baseUrl' => '',
            ...
        ],
Ответить