ПРОЕКТЫ 


  АРХИВ 


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: Баг в директиве alias



On Thu, Mar 26, 2009 at 03:22:11PM +0100, Sergey Bondari wrote:

> Hello nginx-ru,
> 
>       неправильно обрабатываются переменные в директиве alias.
> 
>       НЕ РАБОТАЕТ (делает 301 в то куда показал X-ACCEL-REDIRECT)
>       
>       set $testvar "/var/filestorage/";
>       location /.download/ {
>               internal;
>               alias "$testvar";
>       }
> 
> 
>       
>       РАБОТАЕТ
>       
>       location /.download/ {
>               internal;
>               alias "/var/filestorage/";
>       }

Патч. Ошибка появилась в 0.7.42.


-- 
Игорь Сысоев
http://sysoev.ru
Index: src/http/ngx_http_core_module.c
===================================================================
--- src/http/ngx_http_core_module.c     (revision 1926)
+++ src/http/ngx_http_core_module.c     (working copy)
@@ -1695,8 +1695,14 @@
         last = ngx_copy(path->data, clcf->root.data, clcf->root.len);
 
     } else {
-        reserved += alias ? 1 : r->uri.len + 1;
 
+#if (NGX_PCRE)
+        reserved += alias ? (clcf->captures ? 1 : r->uri.len - alias + 1)
+                          : r->uri.len + 1;
+#else
+        reserved += r->uri.len - alias + 1;
+#endif
+
         if (ngx_http_script_run(r, path, clcf->root_lengths->elts, reserved,
                                 clcf->root_values->elts)
             == NULL)
@@ -1711,10 +1717,12 @@
         *root_length = path->len - reserved;
         last = path->data + *root_length;
 
-        if (alias) {
+#if (NGX_PCRE)
+        if (alias && clcf->captures) {
             *last = '\0';
             return last;
         }
+#endif
     }
 
     last = ngx_cpystrn(last, r->uri.data + alias, r->uri.len - alias + 1);


 




Copyright © Lexa Software, 1996-2009.