aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2010-05-27 13:44:22 +0000
committerIgor Sysoev <igor@sysoev.ru>2010-05-27 13:44:22 +0000
commit34ab21c53ad39ef96d9fb1dcc4d6e9fc5a72f4a6 (patch)
tree59462aedee04046f437f8fb3acd9615e0da9b72d
parentef0fae4279b7190a9a24d15fc14be1bc59e7c344 (diff)
downloadnginx-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.c14
-rw-r--r--src/http/ngx_http_request.h1
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;