$uri - url_encoded?

Igor Sysoev igor на sysoev.ru
Вт Сен 14 22:37:30 MSD 2010


On Tue, Sep 14, 2010 at 09:31:05PM +0400, xinu wrote:

> sorry, поспешил с enter.
> 
> вопрос, который собственно и хотел написать:
> 
> как убедить nginx не переводить запрошенный URL в urldecoded?
> 
> моя проблема в пробелах, которые я кодирую в cms "%20", все файлы также (т.е. с "%20" лежат на диске - т.е. без пробелов (!!!).
> однако запрос
> 
> GET /file%20with%20blank HTTP/1.1
> 
> будет по try_files искать "/file with blank" - файл, который я генерирую как "/file%20with%20blank"
> 
> $request_uri - выглядет так как мне надо и работал бы, но - не помогает, т.к. есть еще реврайты и try_files мне нужен по измененному УРЛу.
> реврайты же только ухудшают УРЛ - переписывая его с "%20" на "%2520" -- т.е переписываю "%" в его url_ecoded форму: "%25".
> 
> как однозначно определить поведение / реакцию nginx'а ?

Запрашивать "/file%2520with%2520blank".

> если решение еще нет, опции (в конфиге в server, location и в if) :
> 
>      url_dencoding on / of;
> 
> помогли бы.
> 
> большое спасибо.
> 
> Сергей.
> 
> ps: sbin/nginx -v
> nginx version: nginx/0.8.34
> 
> 
> ps2: подобная проблема распространяется и на многие другие "символы" например "/" -> "%2f"
> т.е. если мне нужен файл с именем "2/3" - не файл 3 в каталоге 2 , а именно "2/3" -- я делаю просто "2%2f3" файл - на мой взгляд - удобно.
> 
> считаю фичу полезной.
> 
> если же есть другое готовое решение - буду рад и признателен его узнать

Конечно, есть: если файл на диске называется "2%2f3", то запрашывать
нужно "2%252f3", а не "2%2f3".


-- 
Igor Sysoev
http://sysoev.ru/en/



Подробная информация о списке рассылки nginx-ru