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);
|