diff options
author | Igor Sysoev <igor@sysoev.ru> | 2010-05-27 13:44:22 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2010-05-27 13:44:22 +0000 |
commit | 34ab21c53ad39ef96d9fb1dcc4d6e9fc5a72f4a6 (patch) | |
tree | 59462aedee04046f437f8fb3acd9615e0da9b72d | |
parent | ef0fae4279b7190a9a24d15fc14be1bc59e7c344 (diff) | |
download | nginx-34ab21c53ad39ef96d9fb1dcc4d6e9fc5a72f4a6.tar.gz nginx-34ab21c53ad39ef96d9fb1dcc4d6e9fc5a72f4a6.zip |
fix a try_files/alias case when alias uses captures and
try_files .html "" / =404;
-rw-r--r-- | src/http/ngx_http_core_module.c | 14 | ||||
-rw-r--r-- | src/http/ngx_http_request.h | 1 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c index a91d5854b..f7c44849c 100644 --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -1286,6 +1286,7 @@ ngx_http_core_try_files_phase(ngx_http_request_t *r, } else if (clcf->regex) { if (!test_dir) { r->uri = path; + r->add_uri_to_alias = 1; } #endif } else { @@ -1783,7 +1784,9 @@ ngx_http_map_uri_to_path(ngx_http_request_t *r, ngx_str_t *path, ngx_uint_t captures; captures = alias && clcf->regex; - reserved += captures ? 1 : r->uri.len - alias + 1; + + reserved += captures ? r->add_uri_to_alias ? r->uri.len + 1 : 1 + : r->uri.len - alias + 1; #else reserved += r->uri.len - alias + 1; #endif @@ -1804,8 +1807,12 @@ ngx_http_map_uri_to_path(ngx_http_request_t *r, ngx_str_t *path, #if (NGX_PCRE) if (captures) { - *last = '\0'; - return last; + if (!r->add_uri_to_alias) { + *last = '\0'; + return last; + } + + alias = 0; } #endif } @@ -2213,6 +2220,7 @@ ngx_http_internal_redirect(ngx_http_request_t *r, #endif r->internal = 1; + r->add_uri_to_alias = 0; r->main->count++; ngx_http_handler(r); diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h index f9622714c..0559b4650 100644 --- a/src/http/ngx_http_request.h +++ b/src/http/ngx_http_request.h @@ -437,6 +437,7 @@ struct ngx_http_request_s { unsigned invalid_header:1; + unsigned add_uri_to_alias:1; unsigned valid_location:1; unsigned valid_unparsed_uri:1; unsigned uri_changed:1; |