обнаружилась такая особенность модуля 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