summaryrefslogtreecommitdiffhomepage
path: root/src/http/ngx_http_core_module.c
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2015-08-16 10:51:34 +0300
committerMaxim Dounin <mdounin@mdounin.ru>2015-08-16 10:51:34 +0300
commit05982ffdf547332155d0c1540624717f57503cf0 (patch)
treeef76e6ca41c98d94fd6d539052f895c8711ab2ad /src/http/ngx_http_core_module.c
parent4fec72dc8cbd4af81ce2602e778cae849aac072b (diff)
downloadnginx-05982ffdf547332155d0c1540624717f57503cf0.tar.gz
nginx-05982ffdf547332155d0c1540624717f57503cf0.tar.bz2
Fixed wrong URI after try_files in nested location (ticket #97).
The following configuration with alias, nested location and try_files resulted in wrong file being used. Request "/foo/test.gif" tried to use "/tmp//foo/test.gif" instead of "/tmp/test.gif": location /foo/ { alias /tmp/; location ~ gif { try_files $uri =405; } } Additionally, rev. c985d90a8d1f introduced a regression if the "/tmp//foo/test.gif" file was found (ticket #768). Resulting URI was set to "gif?/foo/test.gif", as the code used clcf->name of current location ("location ~ gif") instead of parent one ("location /foo/"). Fix is to use r->uri instead of clcf->name in all cases in the ngx_http_core_try_files_phase() function. It is expected to be already matched and identical to the clcf->name of the right location.
Diffstat (limited to 'src/http/ngx_http_core_module.c')
-rw-r--r--src/http/ngx_http_core_module.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index 8c8d23cd3..22400cafa 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -1240,7 +1240,7 @@ ngx_http_core_try_files_phase(ngx_http_request_t *r,
*e.pos = '\0';
if (alias && alias != NGX_MAX_SIZE_T_VALUE
- && ngx_strncmp(name, clcf->name.data, alias) == 0)
+ && ngx_strncmp(name, r->uri.data, alias) == 0)
{
ngx_memmove(name, name + alias, len - alias);
path.len -= alias;
@@ -1324,6 +1324,8 @@ ngx_http_core_try_files_phase(ngx_http_request_t *r,
}
} else {
+ name = r->uri.data;
+
r->uri.len = alias + path.len;
r->uri.data = ngx_pnalloc(r->pool, r->uri.len);
if (r->uri.data == NULL) {
@@ -1331,8 +1333,8 @@ ngx_http_core_try_files_phase(ngx_http_request_t *r,
return NGX_OK;
}
- p = ngx_copy(r->uri.data, clcf->name.data, alias);
- ngx_memcpy(p, name, path.len);
+ p = ngx_copy(r->uri.data, name, alias);
+ ngx_memcpy(p, path.data, path.len);
}
ngx_http_set_exten(r);