ПРОЕКТЫ 


  АРХИВ 


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: Отсутствие urlencode в резул ьтирующем url при rewrite



Hello!

On Tue, Dec 29, 2009 at 02:28:55PM +0200, Alexander Radostin wrote:

> Все привет!
> 
> Мы недавно перешли с лайти на nginx и вылезла интересная проблема с
> различным поведением при rewrite.
> 
> Вот такое правило:
> 
> rewrite ^/download/([^/]+)/(.+)/$
> /index.php/download/?hash=$1&filename=$2        last;
> 
> работает как надо, но к аргументам  $1 и $2 не применяется urlencode, что
> приводит к проблемам в случае если в $2, например, есть апостроф "&". В
> итоге query_string получается битая (имя файла обрывается и появляется еще
> одна переменная). Как можно обойти эту проблему и есть ли способ делать
> url_encode для аргументов в результирующем url?

При составлении query string nginx экранирует только символы, не 
допустимые в query string.  Т.е. скажем пробел будет экранирован, 
а амперсенд (апостроф - это совсем другой символ) - нет.

Следить за структурой аргументов - это совсем отдельная задача.  И 
она не может решаться автоматически, т.к. нужна возможность 
вставлять из одной переменной несколько аргументов.

Варианты решения:

1. написать N rewrite'ов, делающих то экранирование которое вам 
нужно

2. написать нужное экранирование на встроенном перле

3. приложить патчи catap'а для получения переменных $urlencode_*

Совсем правильно было бы конечно отказаться от использования 
rewrite'ов, да и вообще php для скачивания файлов, но это совсем 
отдельный и вероятно неинтересный разговор.

Maxim Dounin

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


 




Copyright © Lexa Software, 1996-2009.