Exebeche
@Exebeche
Осваиваю программирование

Как в Yii2 настроить 301 редирект для адресов типа /catalog/trikotazh?page=1?

Правила в .htaccess, похоже не рассчитаны на /blog/category?page=1 и ни разу не работают с таким адресом (наверное из-за знаков для регулярок)
Но нужно чтобы пагинация при обратном посещении первой страницы категории открывалась без GET параметра в строке адреса...
Как заставить /blog/category?page=1 превратиться в /blog/category
  • Вопрос задан
  • 621 просмотр
Решения вопроса 2
slo_nik
@slo_nik Куратор тега Yii
Доброе утро.
Оставьте .htaccess и проверку строки запроса в покое)))
Всё решается гораздо проще.
$dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
               'defaultPageSize' => 20,
               'forcePageParam' => false,
            ]
        ]);

При таких настройках pagination для первой страницы не будет показывать page=1 и не будет показывать per-page в адресе страницы.
Так что настраивать перенаправление в .htaccess для этого не нужно, а тем более делать какие-либо проверки в контролере, как советует @Giperoglif

p.s. Если всё-таки использовать htaccess, то должно сработать следующие директивы
RewriteCond %{QUERY_STRING} .
RewriteCond %{QUERY_STRING} (?:^|&)page=1 [NC]
RewriteRule ^ %{REQUEST_URI}? [R=301,L,NE]
Ответ написан
amurcoder
@amurcoder
Web Developer
Иногда удивляюсь людям, которые отвечают на вопросы здесь. Им лишь бы ответить. Правильно, не правильно - лишь бы вставить свои пять копеек.
Человек спрашивает: как сделать 301 редирект с /catalog/trikotazh?page=1 на /catalog/trikotazh.
'forcePageParam' => false
Просто обрезает page=1 при клике на ссылку (кнопку) первой страницы.
Но если набрать в адресной строке /catalog/trikotazh?page=1, то там будет ещё висеть этот page=1.
Это дубль, нужен редирект. Автор вопроса прямо об этом спрашивает.
В контроллере:
public function beforeAction($action)
{
        $page = (int)\Yii::$app->request->getQueryParam('page');
        if ($page == 1) {
            \Yii::$app->response->redirect(Url::to(['index']), 301);
        }
        return parent::beforeAction($action);
 }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Giperoglif
не нравится .htaccess - сделайте прямо в контроллере return $this->redirect('/blog/category'); по наличию в querystring'е параметра page==1
Ответ написан
Ваш ответ на вопрос

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

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