diff options
author | Igor Sysoev <igor@sysoev.ru> | 2008-04-29 14:06:43 +0400 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2008-04-29 14:06:43 +0400 |
commit | 615fe7f4be641d370704eb4694ba101ec93895ad (patch) | |
tree | 1497921ed6d101a5bc49802432569aa001887c1a /src | |
parent | 49db9d4602daa479e313cedc5ef5778221952301 (diff) |
args support in static error_page
Diffstat (limited to 'src')
-rw-r--r-- | src/http/ngx_http_core_module.c | 17 | ||||
-rw-r--r-- | src/http/ngx_http_core_module.h | 1 | ||||
-rw-r--r-- | src/http/ngx_http_special_response.c | 4 |
3 files changed, 19 insertions, 3 deletions
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c index 5eed3b1e1..f57db3622 100644 --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -3471,6 +3471,7 @@ ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { ngx_http_core_loc_conf_t *lcf = conf; + u_char *args; ngx_int_t overwrite; ngx_str_t *value, uri; ngx_uint_t i, n, nvar; @@ -3539,6 +3540,8 @@ ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) } } + args = (u_char *) ngx_strchr(uri.data, '?'); + for (i = 1; i < cf->args->nelts - n; i++) { err = ngx_array_push(lcf->error_pages); if (err == NULL) { @@ -3577,7 +3580,19 @@ ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) } } - err->uri = uri; + if (args) { + err->uri.len = args - uri.data; + err->uri.data = uri.data; + args++; + err->args.len = (uri.data + uri.len) - args; + err->args.data = args; + + } else { + err->uri = uri; + err->args.len = 0; + err->args.data = NULL; + } + err->uri_lengths = uri_lengths; err->uri_values = uri_values; } diff --git a/src/http/ngx_http_core_module.h b/src/http/ngx_http_core_module.h index e11d82941..9a9f97bdd 100644 --- a/src/http/ngx_http_core_module.h +++ b/src/http/ngx_http_core_module.h @@ -225,6 +225,7 @@ typedef struct { ngx_int_t status; ngx_int_t overwrite; ngx_str_t uri; + ngx_str_t args; ngx_array_t *uri_lengths; ngx_array_t *uri_values; } ngx_http_err_page_t; diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c index 741a9b1d4..306944b61 100644 --- a/src/http/ngx_http_special_response.c +++ b/src/http/ngx_http_special_response.c @@ -441,8 +441,6 @@ ngx_http_send_error_page(ngx_http_request_t *r, ngx_http_err_page_t *err_page) r->zero_in_uri = 0; - args = NULL; - if (err_page->uri_lengths) { if (ngx_http_script_run(r, &u, err_page->uri_lengths->elts, 0, err_page->uri_values->elts) @@ -453,6 +451,7 @@ ngx_http_send_error_page(ngx_http_request_t *r, ngx_http_err_page_t *err_page) p = u.data; uri = &u; + args = NULL; if (*p == '/') { @@ -488,6 +487,7 @@ ngx_http_send_error_page(ngx_http_request_t *r, ngx_http_err_page_t *err_page) } else { uri = &err_page->uri; + args = &err_page->args; } if (uri->data[0] == '/') { |