Вопрос по urlManager

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

Вопрос по urlManager

Сообщение azz »

Настраиваю urlManager:

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

        'urlManager' => [
            'enablePrettyUrl' => true,
            'enableStrictParsing' => true,
            'showScriptName' => false,
            'rules' => [
                '/' => 'site/index',
                '<action:signup|login|logout>' => 'site/<action>',
            ],
        ],
Если попытаться сформировать ссылку

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

yii\helpers\Url::to(['site/login'])
то выдаёт "//login", соотв. ссылка получается http://login

Подскажите, как получить правильный урл?
Аватара пользователя
nihaha
Сообщения: 95
Зарегистрирован: 2017.02.12, 13:30

Re: Вопрос по urlManager

Сообщение nihaha »

Та UrlManager правильно настроен, он и должен выдавать только внутренний путь, без site.com, типа такого

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

<a href="/controller/action">Ссылка</a>
Похоже, что тут не то что-то с настройкой самого вебсервера

Можно еще попробовать так генерировать

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

Url::toRoute('site/index', true)
azz
Сообщения: 197
Зарегистрирован: 2016.07.06, 17:20

Re: Вопрос по urlManager

Сообщение azz »

nihaha писал(а): 2017.09.18, 16:32 Та UrlManager правильно настроен, он и должен выдавать только внутренний путь, без site.com, типа такого

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

<a href="/controller/action">Ссылка</a>
Похоже, что тут не то что-то с настройкой самого вебсервера
действительно, такая ссылка формируется только на локальном OpenServer. На хостинге всё нормально. Куда покопать?
nihaha писал(а): 2017.09.18, 16:32 Можно еще попробовать так генерировать

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

Url::toRoute('site/index', true)
выдаёт http://signup
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Вопрос по urlManager

Сообщение urichalex »

А если так?
Url::toRoute('/site/index')
azz
Сообщения: 197
Зарегистрирован: 2016.07.06, 17:20

Re: Вопрос по urlManager

Сообщение azz »

urichalex писал(а): 2017.09.18, 17:15 А если так?
Url::toRoute('/site/index')
так получается то же что и вначале: "//login"
azz
Сообщения: 197
Зарегистрирован: 2016.07.06, 17:20

Re: Вопрос по urlManager

Сообщение azz »

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

        'request' => [
            'baseUrl' => '/'
        ],
вот корень зла, слеш нужно было убрать...
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Вопрос по urlManager

Сообщение Dominus »

Еще можно попробовать использовать \yii\web\UrlNormalizer

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

'urlManager' => [
     //...
     'normalizer' => [
           'class' => 'yii\web\UrlNormalizer',
           'action' => \yii\web\UrlNormalizer::ACTION_REDIRECT_PERMANENT,
     ],
     //...
],
Исключает из URL дублирование /

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

sitename.ru//controller///action
получится

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

sitename.ru/controller/action
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
azz
Сообщения: 197
Зарегистрирован: 2016.07.06, 17:20

Re: Вопрос по urlManager

Сообщение azz »

Dominus писал(а): 2017.09.19, 13:18 Еще можно попробовать использовать \yii\web\UrlNormalizer

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

'urlManager' => [
     //...
     'normalizer' => [
           'class' => 'yii\web\UrlNormalizer',
           'action' => \yii\web\UrlNormalizer::ACTION_REDIRECT_PERMANENT,
     ],
     //...
],
Исключает из URL дублирование /

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

sitename.ru//controller///action
получится

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

sitename.ru/controller/action
прописал всё как выше приведено, не убирает ничего
Sadex
Сообщения: 5
Зарегистрирован: 2017.09.11, 22:23

Re: Вопрос по urlManager

Сообщение Sadex »

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

'homeUrl' => '/',

    'request' => [

            'baseUrl' => ""
      ],
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Вопрос по urlManager

Сообщение Dominus »

azz писал(а): 2017.09.19, 17:05 прописал всё как выше приведено, не убирает ничего

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

'request' => [
   'csrfParam' => '_csrf-frontend',
   'baseUrl' => '', // Без слэша
],

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

'urlManager' => [
     'enablePrettyUrl' => true,
     'enableStrictParsing' => true,
     'showScriptName' => false,
     'rules' => [
          '' => 'site/index',
          '<action:signup|login|logout>' => 'site/<action>',
     ],
],
С такой настройкой если указать URL

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

sitename.ru///site/login 
/** Будет 404 */
А если с такой:

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

'urlManager' => [
     'enablePrettyUrl' => true,
     'enableStrictParsing' => true,
     'showScriptName' => false,
     'normalizer' => [
           'class' => 'yii\web\UrlNormalizer',
           'action' => \yii\web\UrlNormalizer::ACTION_REDIRECT_PERMANENT,
     ],
     'rules' => [
          '' => 'site/index',
          '<action:signup|login|logout>' => 'site/<action>',
     ],
],

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

sitename.ru///site/login 
/** Будет sitename.ru/site/login */
То есть URL нормализуется.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
azz
Сообщения: 197
Зарегистрирован: 2016.07.06, 17:20

Re: Вопрос по urlManager

Сообщение azz »

Sadex писал(а): 2017.09.19, 17:21 С такой настройкой если указать URL

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

sitename.ru///site/login 
/** Будет 404 */
А если с такой:

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

sitename.ru///site/login 
/** Будет sitename.ru/site/login */
То есть URL нормализуется.
не пойму :)
я пишу в виде:

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

<a href="<?= yii\helpers\Url::to(['site/login']) ?>">link</a>
в результате получаю

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

<a href="//login">link</a>
в обоих случаях. Что нужно написать, что бы заработала нормализация?
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Вопрос по urlManager

Сообщение Dominus »

azz писал(а): 2017.09.20, 09:54
Sadex писал(а): 2017.09.19, 17:21 С такой настройкой если указать URL

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

sitename.ru///site/login 
/** Будет 404 */
А если с такой:

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

sitename.ru///site/login 
/** Будет sitename.ru/site/login */
То есть URL нормализуется.
не пойму :)
я пишу в виде:

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

<a href="<?= yii\helpers\Url::to(['site/login']) ?>">link</a>
в результате получаю

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

<a href="//login">link</a>
в обоих случаях. Что нужно написать, что бы заработала нормализация?
Сперва так
Sadex писал(а): 2017.09.19, 17:21

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

'homeUrl' => '/',

    'request' => [

            'baseUrl' => ""
      ],
Затем уже нормализацию включать.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
azz
Сообщения: 197
Зарегистрирован: 2016.07.06, 17:20

Re: Вопрос по urlManager

Сообщение azz »

Dominus писал(а): 2017.09.20, 10:57 Сперва так
Sadex писал(а): 2017.09.19, 17:21

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

'homeUrl' => '/',

    'request' => [

            'baseUrl' => ""
      ],
Затем уже нормализацию включать.
я просто прописал 'baseUrl' => "", и всё, слеш больше не дублируется. А когда вообще может возникать такое дублирование?
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Вопрос по urlManager

Сообщение Dominus »

azz писал(а): 2017.09.20, 15:24 я просто прописал 'baseUrl' => "", и всё, слеш больше не дублируется. А когда вообще может возникать такое дублирование?
Ну мало ли, тот же пользователь введёт в адресной строке кучу слэшей, а тут уже всё предусмотрено))
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Ответить