Как правильно составить правило для переменных фильтра в urlrewrite.php 1С Битрикс?

Добрый день,

при помощи urlrewrite.php в 1С Битрикс пытаюсь настроить ЧПУ для параметров фильтра, сейчас url имеет вид:

?type=prodaga&etag=2&balkon=1&area_from=0&area_to=12&n=x&n2=x2...

цель получить вид
?tip_prodaga/etag_2/balkon_da/ploshad_ot_0_do_12/esheget/get2/get3/...

Собственно этих переменных передаваемых из формы фильтра может быть n'ое количество.

Возможно ли прописать условие, которое будет получать значения для переменных в зависимости от их наличия в url?

Не таскать же за собой огромный хвост из всех возможных параметров:

array(
	"CONDITION" => "#^/filter/tip_([a-zA-Z0-9\\-\\_]+)/etag_([a-zA-Z0-9\\-\\_]+)/balkon_([a-zA-Z0-9\\-\\_]+)\\?*(.*?)$#", // ...итд
	"RULE" => "type=\$1&etag=\$2&balkon=/$3", // ..итд
	"ID" => "",
	"PATH" => "/filter/index.php",
),


или все же мне необходимо прописать под каждый случай свое правило?...

Спасибо.
  • Вопрос задан
  • 4668 просмотров
Пригласить эксперта
Ответы на вопрос 2
цель получить вид
?tip_prodaga/etag_2/balkon_da/ploshad_ot_0_do_12/esheget/get2/get3/...

А зачем? Если этот путь все равно параметр, то какой во всех этих телодвижениях смысл?

Вообще сколько раз заходило обсуждение таких вещей, столько же раз удавалось переубедить заказчика не заниматься ерундой. Фильтр он на то и фильтр.

Ну а если всё же не удаётся, то поддержу Павел Безруков - передавайте весь этот путь в одну переменную, и парсите вот это tip_prodaga/etag_2/balkon_da/ploshad_ot_0_do_12/ уже в рантайме PHP. Это проще, удобнее и не обременит реврайт кучей сложных правил, которые в силу своей длины окажутся в начале вашего urlrewrite и будут проверятся на каждом хите.
Ответ написан
Комментировать
bezrukovPS
@bezrukovPS
Ведущий программист 1С-Битрикс
Попробуйте так
Array(
"CONDITION" => "#^/filter/tip_([a-zA-Z0-9-_]+)/etag_([a-zA-Z0-9-_]+)/balkon_([a-zA-Z0-9-_]+)#", // ...итд
  "RULE" => "type=\$1&etag=\$2&balkon=\$3", // ...итд
  "ID" => "bitrix:catalog.smart.filter",
  "PATH" => "/filter/index.php",
),
)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы