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
|