$request_uri?

Gena Makhomed gmm at csdoc.com
Wed Jan 21 18:08:46 MSK 2009


есть вопрос по документации:

http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html

=========================================================================

Если в строке замены указаны аргументы, то предыдущие аргументы запроса
добавляются после них. Можно отказаться от этого добавления,
указав в конце строки замены знак вопроса:

        rewrite  ^/users/(.*)$  /show?user=$1?  last;

=========================================================================

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

предложение:

1. делать неявное добавление аргументов запроса только в том случае,
если *в конфиге* nginx явно встречается символ '?', тогда при редиректах
на http://www.example.com$request_uri не нужно будет явно указывать
? чтобы подавить не нужное в данном случае удваивание аргументов.

2. другой вариант - вообще убрать неявное добавление $is_args$args,
что имхо существенно противоречит идеологии работы nginx (?)
и тогда, при желании - администратор добавит $is_args$args
там где это ему действительно будет нужно при редиректах.

например, вот такой фрагмент конфига из этого списка рассылки:

  rewrite      /eng(.*)  /eng.php?host=$host&request_uri=$request_uri  break;

насколько я понимаю, продублирует аргументы запроса, и нужно будет делать

-  rewrite      /eng(.*)  /eng.php?host=$host&request_uri=$request_uri  break;
+  rewrite      /eng(.*)  /eng.php?host=$host&request_uri=$request_uri?  break;

чтобы вручную подавить дублирование аргументов.

т.е. тех случаев, когда автоматическое добавление аргументов запроса
необходимо - наверное меньше, чем тех случаев когда оно не нужно,
и его приходится принудительно подавлять через '?' в конце строки.

=============================================================================

On Wednesday, January 21, 2009 at 14:29:32, Maxim Dounin wrote:

>>         rewrite  ^  http://www.pspcrazy.com$request_uri  permnent;

MD> -         rewrite  ^  http://www.pspcrazy.com$request_uri  permnent;
MD> +         rewrite  ^  http://www.pspcrazy.com$request_uri?  permanent;

MD> (added '?' to avoid query string duplication, typo fixed)

=============================================================================

On Tuesday, September 30, 2008 at 23:02:24, Maxim Dounin wrote:

MD> -        rewrite ^ https://www.example.com$request_uri permanent;
MD> +        rewrite ^ https://www.example.com$request_uri? permanent;

MD> Since $request_uri already includes query string, it's important 
MD> to add '?' to prevent duplication of query string.

=============================================================================

On Monday, September 15, 2008 at 12:21:46, Maxim Dounin wrote:

>>> >>       rewrite   ^   http://www.$host$request_uri permanent;

MD> -       rewrite   ^   http://www.$host$request_uri permanent;
MD> +       rewrite   ^   http://www.$host$request_uri? permanent;

>>> а тут не нужно добавлять $is_args$args ?

>>Нет, $request_uri - это оригинальня строка запроса клиента со всеми аргументами.

MD> Угу, именно поэтому.

=============================================================================

-- 
Best regards,
 Gena






More information about the nginx-ru mailing list