Nginx переписать правильно заключенный в кавычки амперсанд в значения, вызывающие проблему - PullRequest
0 голосов
/ 10 мая 2011

Я пытаюсь переписать некоторые URL-адреса с использованием следующего правила перезаписи nginx

rewrite ^/some\/url\/(.*)\/$ /some/url/?filter=$1;

Перезапись не работает, если запрос содержит & например

?filter=key:abcd & efgh

, который яЯ правильно цитирую

?filter=abcd%20%26%20N%20efgh

Моя проблема только переписана URL /som/url/key:abcd%20%26%20N%20efgh не работают.Если я получаю к нему доступ как /some/url/?filter=abcd%20%26%20N%20efgh, он работает нормально.

Я что-то упускаю?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 августа 2011

Я заметил, что я использовал старую версию nginx (7.6), и проблема была решена путем обновления до последней стабильной версии (1.0).

0 голосов
/ 01 июня 2011

Помещение URL, который вы хотите переписать в другое «местоположение», может решить вашу проблему. (Я полагаю, в директиве определения местоположения nginx не экранирует) Так что для вашего примера это будет:

location /some/url/ {
 if ($uri ~* ^/some/url/(.*)$
 {
   rewrite ^.*$ /some/url/?filter=$1 break;
 }
 proxy_pass              http://127.0.0.1:8080;
 #proxy_set... <- and other proxy related things
}

по крайней мере, у меня это сработало (в моем случае даже вопросительные знаки были заменены на "% 3f"). Выдержка из официальной документации: «Обратите внимание, что переменная $ args не декодируется, в отличие от URI во время сопоставления местоположения». http://wiki.nginx.org/HttpRewriteModule

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