Путь преобразования правила перенаправления NGINX в строку запроса

У нас есть одно существующее приложение IIS, работающее с Helicon APE, для перезаписи URL-адресов с использованием существующих правил Apache. Это один из примеров:

RewriteRule ^ / webapp /([^/**)/([^/ ]*)(/.+)? / webapp / $ 4? $ ​​2 = $ 3 [NC, L, P, QSA]

Для этих правил преобразуется исходный URL, например /webapp/f6/3/gx/1/default.htm в /default.htm?f6=3&gx=1 . Это поддерживает переменное количество промежуточных путей в APE (по-видимому, и в Apache).

Поскольку APE плохо масштабируется и вылетает под нагрузкой, я начал настраивать NGINX, который будет выполнять перезапись и балансировку нагрузки для серверов IIS в задней части.

Однако я обнаружил одну проблему: одно и то же правило для перезаписи nginx не работает одинаково; Мне пришлось преобразовать его, чтобы оно соответствовало:

rewrite ^ / webapp /(.*)/([^/ sizes+). Htm / webapp / $ 2? $ 1;

, что на самом деле для /webapp/f6/3/gx/1/default.htm возвращает /webapp/default.htm?f6/3/gx/1 .

Я пытался найти способ заставить nginx преобразовывать элементы пути / x / y / g / z в пары строк запроса ? x = y & g = z . Кажется, что Apache делает это автоматически, тогда как nginx этого не делает и не может ничего найти в документации или в других вопросах на этом сайте или в StackOverflow.

Очевидно, с помощью карты это можно было бы сделать, но не могу найти конкретного использования, и я не являюсь экспертом по nginx, чтобы это сделать. Любая помощь или указание. будут рады.

1
задан 12 December 2017 в 03:01
1 ответ

Если вы правильно построите правило перезаписи, оно станет рекурсивным и будет запрашивать параметры на каждой итерации, пока не будут использованы все элементы пути.

Например:

rewrite ^(/webapp)/([^/]+)/([^/]+)(/.+)$ $1$4?$2=$3 redirect;

Как rewrite автоматически добавляет существующую строку запроса, приведенный выше оператор расширяет ее с каждым перенаправлением.

Тот же трюк может быть достигнут с внутренним перенаправлением, поместив оператор rewrite ... last в строку блок расположения .

Подробнее см. этот документ .

0
ответ дан 4 December 2019 в 04:21

Теги

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