Как настроить Yii2 UrlManager для обработки правил с косой чертой и без нее

У меня есть такая страница, как domain.com/calendar/2001/8/22, ее могут посетить

domain.com/calendar/2001
domain.com/calendar/2001/8
domain.com/calendar/2001/8/22

Он будет отображать различный контент в зависимости от URL.

Я настроил правила urlManager:

'calendar/<year:[\-\d]+>' => 'calendar/view',
'calendar/<year:[\-\d]+>/<month:[\d]+>' => 'calendar/view',
'calendar/<year:[\-\d]+>/<month:[\d]+>/<day:[\d]+>' => 'calendar/view',

Ничего страшного. Но когда я посещаю domain.com/calendar/2008/8/ (с косой чертой в конце, пользователи моего сайта часто заходят с косой чертой в конце), я получаю 404.

Как настроить urlManager для обработки правил с завершающей косой чертой и без нее?


person gowhere    schedule 31.03.2020    source источник


Ответы (2)


Добавьте 'suffix' => '/', сразу после 'enablePrettyUrl' => true,. Имейте в виду, что это изменит все ссылки на вашем сайте.

person ExploitFate    schedule 29.04.2020

Вы должны использовать UrlNormalizer для перенаправления "URL-адресов косой черты" на " URL-адреса без косой черты" (или наоборот):

'urlManager' => [
    'enablePrettyUrl' => true,,
    'normalizer' => [
        'class' => 'yii\web\UrlNormalizer',
    ],
],

Он перенаправит все «URL-адреса с косой чертой» на «URL-адреса без косой черты». Если вы хотите использовать «URL-адреса с косой чертой», вы должны установить UrlManager::$suffix на /, то UrlNormalizer перенаправит "URL-адреса без косой черты" на "URL-адреса с косой чертой".

Дополнительную информацию о нормализации можно найти в руководстве.

person rob006    schedule 30.04.2020