Gena Makhomed
July 20, 2011 03:54PM
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@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

rewrite rul

yokodzun July 20, 2011 01:59PM

Re: rewrite rul

Igor Sysoev July 20, 2011 03:06PM

rewrite

Gena Makhomed July 20, 2011 03:54PM

Re: rewrite rul

yokodzun July 21, 2011 03:23AM

Re: rewrite rul

Igor Sysoev July 21, 2011 03:32AM

Re: rewrite rul

yokodzun July 21, 2011 05:11PM

Re: rewrite rul

Igor Sysoev July 22, 2011 09:28AM

Re: rewrite rul

yokodzun July 22, 2011 11:24AM

Re: rewrite rul

Igor Sysoev July 22, 2011 11:28AM

Re: rewrite rul

yokodzun July 25, 2011 03:22AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 170
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 500 on July 15, 2024
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready