Замена указанного символа в аргументах запроса через NGINX - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь заменить определенный символ (знак плюс +) в части аргументов на символ пробела (% 20).Я сделал переписать для части пути, но во время тестирования я узнал, что NGINX не меняет аргументы после?знак (я новичок в NGINX).

Я пытался сделать это для части конфигурации args, но он не работает должным образом, он добавляет 20 долларов, пока не получит сообщение об ошибке, что страница не перенаправляется правильно.

URL запроса, который я получаю, всегда один и тот же.

func=autocomplete&q=<(unlimited number of letters and plus signs (mostly 4-5 plus signs)>&key_lic=xxxxx

Код в конфигурациях NGINX следующий.

location /autocomplete/luka/ {
        if ($args ~* "^([^+]*)(\+?)([^+]*)(\+?)([^+]*)(\+?)(.*)$"){
                set $args $1%20$3%20$5%20$7;
                rewrite  (.*)$ $1 redirect;
         }
        proxy_pass http://link.where.to.finish/wm2/;
 }

Спасибо за любую помощь, которую смогполучить.

1 Ответ

0 голосов
/ 16 февраля 2019

Ваша существующая схема дает сбой, поскольку все знаки + являются необязательными.

Если вы хотите перенаправить свой URI на тот, где все знаки + заменены на %20, вы можетепросто используйте пробел и позвольте Nginx и / или браузеру обрабатывать кодировку.

Например:

if ($args ~ ^(.*)\+(.*)$) { return 302 "$uri?$1 $2"; }

Перенаправление рекурсивно, пока все знаки + не будут заменены.


Если вы намерены исправить URI без перенаправления, чтобы только вышестоящий сервер увидел знаки +, замененные на %20, вместо этого используйте rewrite...last.

Например:

if ($args ~ ^(?<first>.*)\+(?<second>.*)$) { 
    rewrite ^(.*)$ "$1?$first%20$second?" last; 
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...