ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

rewrite



On 20.07.2011 22:04, Igor Sysoev wrote:

Не надо rewrite.

кстати, в официальной документации к nginx не отражена
возможность использования "хорошей" директивы return
вместо "плохой" (deprecated?) директивы rewrite:

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

примеры такого использования "хорошей" директивы return
вместо rewrite можно найти только в списке рассылки nginx:

On 06.06.2011 16:40, Igor Sysoev wrote:

> location = /file.rpm {
>      return 301  http://www.domain2.com/folder/file.rpm;
> }

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

это было бы полезно отразить в документации,
чтобы все знали, что например, вместо

location ~* ^(/старый:)(.*)$ {
    rewrite ^ /новый:$2 permanent;
}

просто писать гораздо проще:

location ~* ^(/старый:)(.*)$ {
    return 301 /новый:$2;
}

потому что сейчас с rewrite имеем достаточно
нетривиальные "грабли" в таких случаях:

On 20.07.2011 14:48, Maxim Dounin wrote:
...
>> location ~* ^(/старый:)(.*)$ {
>>      rewrite ^ /новый:$2 permanent;
>> }
...
> Директива rewrite сама по себе выполняет регулярное выражение,
> соответственно $2 будет браться из него (последнего выполненного).
> Можно сделать с использованием именованных выделений, так:
>
>      location ~ ^/старый:(?<page>.*)$ {
>          rewrite ^ /новый:$page permanent;
>      }

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

как вариант - имеет смысл сделать "оптимизацию"
при парсинге конфиге nginx и если встречается

          rewrite ^ URL permanent;

транслировать этот "исходник" в "машинный код"

          return 301 URL;

аналогично и для случая

          rewrite ^ URL redirect;

транслировать в

          return 302 URL;

-----------------------------

обратная совместимость со старыми версиями nginx
при этом не пострадает, но зато будет меньше вопросов
в списке рассылки nginx - почему фрагмент конфига не работает.

а если high performance уже не нужно - то хотя бы поправить доку...
(код "return 301" работает быстрее чем обращение к библиотеке pcre)

но такая оптимизация имеет смысл, потому что с появлением возможности
делать выделения в аргументах директивы location и писать в конфиге
вложенные location`ы - большинство старых rewrite теперь имеет смысл
писать так:

location /uri-static-prefix/
    location ~ regexp {
        rewrite ^ URL permanent;
    }
}

вместо неэффективного и трудночитаемого

location / {
    rewrite regexp URL permanent;
}

неэффективного - потому что prce будет пытаться матчить
regexp на каждый $uri, а трудночитаемого - потому что
судя по документации к rewrite - в нем нельзя использовать
именованные выделения, а только $1 $2 $3 $4 $5 $6 $7 $8 $9
которые труднее читать и понимать, чем обычные $переменнные.

--
Best regards,
 Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.