summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2010-10-18 10:14:00 +0000
committerIgor Sysoev <igor@sysoev.ru>2010-10-18 10:14:00 +0000
commita64b716b22805354e5fe03f66314f6c20c2fb854 (patch)
tree8072b41e3edcfac02c731c51ebc85f196696f2f7
parentc5d1790e1d7c04599975ccf8697688d3be99157c (diff)
downloadnginx-a64b716b22805354e5fe03f66314f6c20c2fb854.tar.gz
allow override redirect status in error_page
-rw-r--r--src/http/ngx_http_core_module.c8
-rw-r--r--src/http/ngx_http_special_response.c8
2 files changed, 7 insertions, 9 deletions
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index a404dd81b..0345be965 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -4069,19 +4069,15 @@ ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
return NGX_CONF_ERROR;
}
- if (overwrite >= 0) {
- err->overwrite = overwrite;
+ err->overwrite = overwrite;
- } else {
+ if (overwrite == -1) {
switch (err->status) {
case NGX_HTTP_TO_HTTPS:
case NGX_HTTPS_CERT_ERROR:
case NGX_HTTPS_NO_CERT:
err->overwrite = NGX_HTTP_BAD_REQUEST;
- break;
-
default:
- err->overwrite = err->status;
break;
}
}
diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c
index 1b7eacec6..19a4bd9ae 100644
--- a/src/http/ngx_http_special_response.c
+++ b/src/http/ngx_http_special_response.c
@@ -523,7 +523,9 @@ ngx_http_send_error_page(ngx_http_request_t *r, ngx_http_err_page_t *err_page)
r->expect_tested = 1;
}
- r->err_status = overwrite;
+ if (overwrite >= 0) {
+ r->err_status = overwrite;
+ }
if (ngx_http_complex_value(r, &err_page->value, &uri) != NGX_OK) {
return NGX_ERROR;
@@ -556,7 +558,7 @@ ngx_http_send_error_page(ngx_http_request_t *r, ngx_http_err_page_t *err_page)
return NGX_ERROR;
}
- r->err_status = NGX_HTTP_MOVED_TEMPORARILY;
+ r->err_status = overwrite > 0 ? overwrite : NGX_HTTP_MOVED_TEMPORARILY;
location->hash = 1;
ngx_str_set(&location->key, "Location");
@@ -570,7 +572,7 @@ ngx_http_send_error_page(ngx_http_request_t *r, ngx_http_err_page_t *err_page)
return ngx_http_send_refresh(r);
}
- return ngx_http_send_special_response(r, clcf, NGX_HTTP_MOVED_TEMPORARILY
+ return ngx_http_send_special_response(r, clcf, r->err_status
- NGX_HTTP_MOVED_PERMANENTLY
+ NGX_HTTP_LEVEL_200);
}