ПРОЕКТЫ 


  АРХИВ 


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 п еременных для дальней ших операций



On Tue, 18 Apr 2006, Eugene wrote:

Для обхода прокси, запрещающих скачивание использую следующую схему с обращением расширений

location / {
          root   html;
          index  index.html index.htm;
          autoindex on;
          if (!-f $request_filename) {
             rewrite ^(/.+)?/([^/]+)\.(.)(.)(.)(.?)$ /$1/$2.$6$5$4$3 last;
#add_header Content-Disposition 'attachment; filename=$2.$6$5$4$3';
             add_header Content-Type application/octet-stream;
          }
          if ($slownet) {
            limit_rate 3k;
          }

т.е. /dir/file.3pm  -->  /dir/file.mp3

Есть желание выдавать оригинаьное имя файла в заголовке, для этого прописываю его в rewrite,
но заголовок не возвращается.
Однако если зайти по адресу / то предлагает скачать страницу и выдает заголовок
content-disposition: attacmhent; filename=.

Где грабли?

Проблема в том, что большинство директив статические (декларативные),
а исполняются только директивы ngx_http_rewrite_module.
http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html#internals

В данном случае происходит следующее:

Если файла нет, то выполяняется rewrite и опять ищется location (из-за last).
В новой конфигурации директив add_header уже нет.

Вот такое должно работать:

location ~ /$ {
         root   html;
         index  index.html index.htm;
         autoindex on;
}

location / {
         root   html;
         index  index.html index.htm;

         uninitialized_variable_warn off;

         if (!-f $request_filename) {
              rewrite ^(/.+)?/([^/]+)\.(.)(.)(.)(.?)$ /$1/$2.$6$5$4$3;
              set   $name  $2.$6$5$4$3;
         }

         if ($slownet) {
             limit_rate 3k;
         }

         add_header Content-Disposition 'attachment; filename=$name';
         add_header Content-Type application/octet-stream;
}


Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.