Mercurial > hg > nginx
diff src/http/ngx_http_special_response.c @ 176:c0552e5ab567
nginx-0.0.1-2003-11-09-23:03:38 import; separate building
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 09 Nov 2003 20:03:38 +0000 |
parents | 894a01c6aea3 |
children | 9f3a78b06c48 |
line wrap: on
line diff
--- a/src/http/ngx_http_special_response.c +++ b/src/http/ngx_http_special_response.c @@ -168,9 +168,10 @@ static ngx_str_t error_pages[] = { int ngx_http_special_response_handler(ngx_http_request_t *r, int error) { - int err, rc; + int err, rc, i; ngx_hunk_t *h; ngx_chain_t *out, **ll, *cl; + ngx_http_err_page_t *err_page; ngx_http_core_loc_conf_t *clcf; rc = ngx_http_discard_body(r); @@ -181,19 +182,6 @@ int ngx_http_special_response_handler(ng r->headers_out.status = error; - if (error < NGX_HTTP_BAD_REQUEST) { - /* 3XX */ - err = error - NGX_HTTP_MOVED_PERMANENTLY; - - } else if (error < NGX_HTTP_INTERNAL_SERVER_ERROR) { - /* 4XX */ - err = error - NGX_HTTP_BAD_REQUEST + 3; - - } else { - /* 5XX */ - err = error - NGX_HTTP_INTERNAL_SERVER_ERROR + 3 + 17; - } - if (r->keepalive != 0) { switch (error) { case NGX_HTTP_BAD_REQUEST: @@ -213,6 +201,31 @@ int ngx_http_special_response_handler(ng } } + clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); + + if (!r->error_page && clcf->error_pages) { + err_page = clcf->error_pages->elts; + for (i = 0; i < clcf->error_pages->nelts; i++) { + if (err_page[i].code == error) { + r->error_page = 1; + return ngx_http_internal_redirect(r, &err_page[i].uri, NULL); + } + } + } + + if (error < NGX_HTTP_BAD_REQUEST) { + /* 3XX */ + err = error - NGX_HTTP_MOVED_PERMANENTLY; + + } else if (error < NGX_HTTP_INTERNAL_SERVER_ERROR) { + /* 4XX */ + err = error - NGX_HTTP_BAD_REQUEST + 3; + + } else { + /* 5XX */ + err = error - NGX_HTTP_INTERNAL_SERVER_ERROR + 3 + 17; + } + if (error_pages[err].len) { r->headers_out.content_length_n = error_pages[err].len + sizeof(error_tail) - 1 @@ -272,8 +285,6 @@ int ngx_http_special_response_handler(ng ngx_alloc_link_and_set_hunk(cl, h, r->pool, NGX_ERROR); ngx_chain_add_link(out, ll, cl); - clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); - if (clcf->msie_padding && r->http_version >= NGX_HTTP_VERSION_10 && error >= NGX_HTTP_BAD_REQUEST