Редирект на необходимый урл в том случае если запрос включает параметры и соответствует паттерну

sysadm nginx-forum на forum.nginx.org
Пт Ноя 4 14:15:26 UTC 2016


У меня довольно странный вопрос, не могу что-то нагуглить похожую проблему.
Если мне надо организовать обычный редирект с одного урла на другой в
котором просто категории или human-readable линк я поступаю так:
rewrite ^(/56184-example-link-to-redirect-79e3100/)$ /target/link
permanent;

Но в последнее время владелец ecommerce хочет делать редиректы типа:

rewrite ^(/example-category?collection=collection-name&filter=filter-var1)$
/target/link permanent;

причем после знака ? идёт иногда один параметр или два как в примере выше, а
иногда гораздо больше. Я прекрасно понимаю и транслирую владельцу сервиса,
что параметры могут меняться местами. Ему пофиг, поскольку где-то в гугле
закешировалось и фигурирует в таком виде. Соответственно надо заставить
нгинкс распознавать весь урл как одно целое. К сожалению для nginx всё что
идет после знака ? это массив с аргументами и на каждый такой массив надо
было бы клепать костыли с кучей if-ов с учётом каждого параметра по
отдельности. С учётом того, что подобных редиректов мне приходит список на
пару сотен - сделать что-то подобное руками - нереально. Парсить и генерить
конфигурацию с частоколом if-ов тоже не айс. Что делать, граждане дорогие?
Можно как-то сломать поведение нгинкса, чтобы он без лишнего анализа и
разбора параметров в $ARG сделал то что я хочу?

Posted at Nginx Forum: https://forum.nginx.org/read.php?21,270765,270765#msg-270765



Подробная информация о списке рассылки nginx-ru