ПРОЕКТЫ 


  АРХИВ 


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]

Re: rewrite_bug?



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
--- 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 "?" */
 


 




Copyright © Lexa Software, 1996-2009.