@szbmsk

Как настроить редирект для страниц сортировок в каталоге?

Добрый день. Помогите плз настроить редирект со страницы сортировки на текущую страницу, например
site.ru/catalog/.../.../?display=block --> site.ru/catalog/.../.../
и для страниц пагинации
site.ru/catalog/.../.../?display=block&PAGEN_1=2 --> site.ru/catalog/.../.../?PAGEN_1=2

имеется 2 группы по 3 фильтра, которые продлевают урл:
?sort=SHOWS&order=desc
?sort=NAME&order=desc
?sort=PRICE&order=desc
?display=block
?display=list
?display=table
может применятся как 1, так и 2 фильтра (любой из них может стоять в начале), например:
site.ru/catalog/.../.../?display=block
site.ru/catalog/.../.../?sort=SHOWS&order=asc&display=block
site.ru/catalog/.../.../?display=table&sort=PRICE&order=desc
site.ru/catalog/.../.../?display=block&PAGEN_1=2
site.ru/catalog/.../.../?sort=SHOWS&order=asc&display=block&PAGEN_1=2
пагинация всегда в конце
  • Вопрос задан
  • 258 просмотров
Решения вопроса 1
@dodo512
RewriteCond %{QUERY_STRING} (?:^|&)sort=
Чтобы каждый раз не ставить (?:^|&) можно сразу в начало проверяемой строки %{QUERY_STRING} добавить &.
RewriteCond &%{QUERY_STRING} &sort=

В итоге правило выглядит так:
RewriteCond &%{QUERY_STRING} &sort=|&display=
RewriteCond &%{QUERY_STRING} &(PAGEN_1=\d+)  [OR]
RewriteRule ^catalog/.+$ /$0?%1 [R=301,L]


Добавлением & в конец проверяемой строки можно избавиться от (?:$|&)
RewriteCond &%{QUERY_STRING}& &sort=(?:SHOWS|NAME|PRICE)&|&display=(?:block|list|table)&
RewriteCond &%{QUERY_STRING}  &(PAGEN_1=\d+)  [OR]
RewriteRule ^catalog/.+$ /$0?%1 [R=301,L]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
shambler81
@shambler81 Куратор тега htaccess
1. Гет не является частью урла по этому вывделяется по другому
2. как это сделать https://donatstudios.com/RewriteRule_Generator
3. ОБрати внимание он всегда генерит все урлы в конце со знаком ? - он удалит все гет параметры, в пративном случае они останутся.
4. что касается любого места тут чтоб не запутаться, включая ? и & так что это не имеет значения.
5. Если тебе нужно часть гет вставить в урл

Теперь тебе нужно будет объеденить в группы то что в верху по этому ты вместо нужного тебе гет параметра пишешь что-то вроде (.+)
и вставляешь ее где тебе нужно но уже не $1 а %1 поскольку они идут из реврайт конда.
Да квантификатор ?:удаляет эту группу из выбора по этому у тебя будет первая
Но это если тебе нужно будет взять часть гет параметра и вставить ее в урл
Ответ написан
Ваш ответ на вопрос

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

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