
Правильным будет склеивать URL со слешем на конце и без слеша, так как это всё равно одна и та же страница. Определитесь как вам нравится больше и затем склейте URL с помощью 301 редиректа. Решите либо всё без слеша будет, либо со слешем на конце.
Вы можете сделать такую склейку разными способами.
Средствами Yii
Для редиректов на URL без слеша, добавив в config/main.php обработчик
return [ ... 'on beforeRequest' => function () { $pathInfo = Yii::$app->request->pathInfo; $query = Yii::$app->request->queryString; if (!empty($pathInfo) && substr($pathInfo, -1) === '/') { $url = '/' . substr($pathInfo, 0, -1); if ($query) { $url .= '?' . $query; } Yii::$app->response->redirect($url, 301); Yii::$app->end(); } }, ... ];
Для редиректов на URL со слешем
return [ ... 'on beforeRequest' => function () { $pathInfo = Yii::$app->request->pathInfo; $query = Yii::$app->request->queryString; if (!empty($pathInfo) && substr($pathInfo, -1) !== '/') { $url = '/' . $pathInfo . '/'; if ($query) { $url .= '?' . $query; } Yii::$app->response->redirect($url, 301); Yii::$app->end(); } }, ... ];
Средствами nginx
Редирект на URLs без слеша
location / { rewrite ^(.*)/$ $1 permanent; try_files $uri $uri/ /index.php?$args; }
Редирект на URLs со слешем
location / { rewrite ^(.*[^/])$ $1/ permanent; try_files $uri $uri/ /index.php?$args; }
Средствами Apache
Редирект на URLs без слеша
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301]
Редирект на URLs со слешем
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*[^/])$ /$1/ [L,R=301]
18 июня 2016, SEO-оптимизация / Метки: SEO
По мотивам – https://github.com/samdark/yii2-cookbook/blob/master/book/handling-trailing-slash-in-urls.md
16 января 2023

Yii2-user сменить текущего пользователя или переход на другого пользователя (SwitchIdentity)
Impersonate User / Become another user
12 декабря 2022

Yii2: uclead MultipleInput + kartik DepDrop
Настраиваем множественные поля с выпадающим списком