aboutsummaryrefslogtreecommitdiff
path: root/src/http/ngx_http_special_response.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2006-08-14 15:09:38 +0000
committerIgor Sysoev <igor@sysoev.ru>2006-08-14 15:09:38 +0000
commit08e63d46ded2584fea1e7547fa2e958ab978f42f (patch)
tree61903390323a199b0cd22c667f24376f5ecaf4ac /src/http/ngx_http_special_response.c
parent4641f171ccfc7e0936646c65ba13515e82299ce0 (diff)
downloadnginx-release-0.3.58.tar.gz
nginx-release-0.3.58.zip
nginx-0.3.58-RELEASE importrelease-0.3.58
*) Feature: the "error_page" directive supports the variables. *) Change: now the procfs interface instead of sysctl is used on Linux. *) Change: now the "Content-Type" header line is inherited from first response when the "X-Accel-Redirect" was used. *) Bugfix: the "error_page" directive did not redirect the 413 error. *) Bugfix: the trailing "?" did not remove old arguments if no new arguments were added to a rewritten URI. *) Bugfix: nginx could not run on 64-bit FreeBSD 7.0-CURRENT.
Diffstat (limited to 'src/http/ngx_http_special_response.c')
-rw-r--r--src/http/ngx_http_special_response.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c
index 734ad6947..dfff64107 100644
--- a/src/http/ngx_http_special_response.c
+++ b/src/http/ngx_http_special_response.c
@@ -295,8 +295,9 @@ ngx_int_t
ngx_http_special_response_handler(ngx_http_request_t *r, ngx_int_t error)
{
ngx_int_t rc;
- ngx_uint_t i, err, msie_padding;
ngx_buf_t *b;
+ ngx_str_t *uri;
+ ngx_uint_t i, err, msie_padding;
ngx_chain_t *out, *cl;
ngx_http_err_page_t *err_page;
ngx_http_core_loc_conf_t *clcf;
@@ -349,9 +350,20 @@ ngx_http_special_response_handler(ngx_http_request_t *r, ngx_int_t error)
r->method = NGX_HTTP_GET;
- if (err_page[i].uri.data[0] == '/') {
- return ngx_http_internal_redirect(r, &err_page[i].uri,
- NULL);
+ uri = &err_page[i].uri;
+
+ if (err_page[i].uri_lengths) {
+ if (ngx_http_script_run(r, uri,
+ err_page[i].uri_lengths->elts, 0,
+ err_page[i].uri_values->elts)
+ == NULL)
+ {
+ return NGX_ERROR;
+ }
+ }
+
+ if (uri->data[0] == '/') {
+ return ngx_http_internal_redirect(r, uri, NULL);
}
r->headers_out.location =
@@ -364,10 +376,10 @@ ngx_http_special_response_handler(ngx_http_request_t *r, ngx_int_t error)
r->headers_out.location->hash = 1;
r->headers_out.location->key.len = sizeof("Location") - 1;
r->headers_out.location->key.data = (u_char *) "Location";
- r->headers_out.location->value = err_page[i].uri;
+ r->headers_out.location->value = *uri;
} else {
- error = NGX_HTTP_INTERNAL_SERVER_ERROR;
+ return NGX_ERROR;
}
}
}