rewrite_bug?

Igor Sysoev is at rambler-co.ru
Mon Aug 28 00:42:24 MSD 2006


On Fri, 25 Aug 2006, Andrey I. Kislyak wrote:

> обнаружилась такая особенность модуля rewrite
>
> при таком реврайте:
> rewrite ^/2/(.*)         /1/2.php?f=$1&$query_string?    permanent;
>
> с обычными запросами вида
> http://example/2/5.jpg
>
> реврайтится на
> http://example/1/2.php?f=5.jpg&
>
>
> но если там будет имя вида:
> http://example/2/thumb_i1723-%C4%D7%D5%DB%CB%C1-%D2%C1%D3%D0.jpg
>
> почему-то появляется перенаправление на:
>
> http://example/1/2.php?f=thumb_i1723-%c4%d7%d5%db%cb%c╦├'f┤'
>
> отсюда вопрос как это можно сделать так чтоб rewrite проходил нормальному?
>
> Ниже вывод HTTP Headers:
>
> http://example/2/thumb_i1723-%C4%D7%D5%DB%CB%C1-%D2%C1%D3%D0.jpg
>
> GET /2/thumb_i1723-%C4%D7%D5%DB%CB%C1-%D2%C1%D3%D0.jpg HTTP/1.1
> Host: example
> User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.13)
> Gecko/20060615
> Accept:
> text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
> Accept-Language: ru,en-us;q=0.7,en;q=0.3
> Accept-Encoding: gzip,deflate
> Accept-Charset: KOI8-R,utf-8;q=0.7,*;q=0.7
> Keep-Alive: 300
> Connection: keep-alive
> Cookie: __utma=108842456.864384593.1155563533.1155563533.1155563533.1;
> __utmz=108842456.1155563533.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none);
> phpbb2mysql_data=a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A0%3A%22%22%3Bs%3A6%3A%22userid%22%3Bi%3A-1%3B%7D
>
> HTTP/1.x 301 Moved Permanently
> Server: nginx/0.3.59
> Date: Thu, 24 Aug 2006 08:35:32 GMT
> Content-Type: text/html
> Content-Length: 185
> Location: http://example/1/2.php?f=thumb_i1723-%c4%d7%d5%db%cb%c╦├'f┤'
> Connection: keep-alive

Прилагаемый патч исправляет ошибку. А вместо

-rewrite ^/2/(.*)         /1/2.php?f=$1                   permanent;

лучше писать

+rewrite ^/2/(.*)         /1/2.php?f=$1&$query_string?    permanent;

тогда не будет пустого "&", если нет аргументов в оригинальном запросе.


Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
--- src/http/ngx_http_script.c	Thu Aug 10 19:16:06 2006
+++ src/http/ngx_http_script.c	Mon Aug 28 00:37:20 2006
@@ -687,9 +687,11 @@
         ngx_memzero(&le, sizeof(ngx_http_script_engine_t));
 
         le.ip = code->lengths->elts;
+        le.line = e->line;
         le.request = r;
         le.captures = e->captures;
         le.ncaptures = e->ncaptures;
+        le.quote = code->redirect;
 
         len = 1;  /* reserve 1 byte for possible "?" */
 


More information about the nginx-ru mailing list