Mercurial > hg > nginx-ranges
comparison src/http/ngx_http_special_response.c @ 487:f2c6a7373274 NGINX_0_7_51
nginx 0.7.51
*) Feature: the "try_files" directive supports a response code in the
fallback parameter.
*) Feature: now any response code can be used in the "return" directive.
*) Bugfix: the "error_page" directive made an external redirect without
query string; the bug had appeared in 0.7.44.
*) Bugfix: if servers listened on several defined explicitly addresses,
then virtual servers might not work; the bug had appeared in 0.7.39.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Sun, 12 Apr 2009 00:00:00 +0400 |
parents | c8cfb6c462ef |
children | ed5e10fb40fc |
comparison
equal
deleted
inserted
replaced
486:ba2ea8c4d60f | 487:f2c6a7373274 |
---|---|
273 | 273 |
274 static ngx_str_t ngx_http_error_pages[] = { | 274 static ngx_str_t ngx_http_error_pages[] = { |
275 | 275 |
276 ngx_null_string, /* 201, 204 */ | 276 ngx_null_string, /* 201, 204 */ |
277 | 277 |
278 #define NGX_HTTP_LEVEL_200 1 | 278 #define NGX_HTTP_LAST_LEVEL_200 202 |
279 #define NGX_HTTP_LEVEL_200 (NGX_HTTP_LAST_LEVEL_200 - 201) | |
279 | 280 |
280 /* ngx_null_string, */ /* 300 */ | 281 /* ngx_null_string, */ /* 300 */ |
281 ngx_string(ngx_http_error_301_page), | 282 ngx_string(ngx_http_error_301_page), |
282 ngx_string(ngx_http_error_302_page), | 283 ngx_string(ngx_http_error_302_page), |
283 ngx_null_string, /* 303 */ | 284 ngx_null_string, /* 303 */ |
284 | 285 |
285 #define NGX_HTTP_LEVEL_300 3 | 286 #define NGX_HTTP_LAST_LEVEL_300 304 |
287 #define NGX_HTTP_LEVEL_300 (NGX_HTTP_LAST_LEVEL_300 - 301) | |
286 | 288 |
287 ngx_string(ngx_http_error_400_page), | 289 ngx_string(ngx_http_error_400_page), |
288 ngx_string(ngx_http_error_401_page), | 290 ngx_string(ngx_http_error_401_page), |
289 ngx_string(ngx_http_error_402_page), | 291 ngx_string(ngx_http_error_402_page), |
290 ngx_string(ngx_http_error_403_page), | 292 ngx_string(ngx_http_error_403_page), |
300 ngx_string(ngx_http_error_413_page), | 302 ngx_string(ngx_http_error_413_page), |
301 ngx_string(ngx_http_error_414_page), | 303 ngx_string(ngx_http_error_414_page), |
302 ngx_string(ngx_http_error_415_page), | 304 ngx_string(ngx_http_error_415_page), |
303 ngx_string(ngx_http_error_416_page), | 305 ngx_string(ngx_http_error_416_page), |
304 | 306 |
305 #define NGX_HTTP_LEVEL_400 17 | 307 #define NGX_HTTP_LAST_LEVEL_400 417 |
308 #define NGX_HTTP_LEVEL_400 (NGX_HTTP_LAST_LEVEL_400 - 400) | |
306 | 309 |
307 ngx_string(ngx_http_error_495_page), /* 495, https certificate error */ | 310 ngx_string(ngx_http_error_495_page), /* 495, https certificate error */ |
308 ngx_string(ngx_http_error_496_page), /* 496, https no certificate */ | 311 ngx_string(ngx_http_error_496_page), /* 496, https no certificate */ |
309 ngx_string(ngx_http_error_497_page), /* 497, http to https */ | 312 ngx_string(ngx_http_error_497_page), /* 497, http to https */ |
310 ngx_string(ngx_http_error_404_page), /* 498, canceled */ | 313 ngx_string(ngx_http_error_404_page), /* 498, canceled */ |
316 ngx_string(ngx_http_error_503_page), | 319 ngx_string(ngx_http_error_503_page), |
317 ngx_string(ngx_http_error_504_page), | 320 ngx_string(ngx_http_error_504_page), |
318 ngx_null_string, /* 505 */ | 321 ngx_null_string, /* 505 */ |
319 ngx_null_string, /* 506 */ | 322 ngx_null_string, /* 506 */ |
320 ngx_string(ngx_http_error_507_page) | 323 ngx_string(ngx_http_error_507_page) |
324 | |
325 #define NGX_HTTP_LAST_LEVEL_500 508 | |
326 | |
321 }; | 327 }; |
322 | 328 |
323 | 329 |
324 static ngx_str_t ngx_http_get_name = { 3, (u_char *) "GET " }; | 330 static ngx_str_t ngx_http_get_name = { 3, (u_char *) "GET " }; |
325 | 331 |
400 | 406 |
401 } else if (error == NGX_HTTP_NO_CONTENT) { | 407 } else if (error == NGX_HTTP_NO_CONTENT) { |
402 /* 204 */ | 408 /* 204 */ |
403 err = 0; | 409 err = 0; |
404 | 410 |
405 } else if (error < NGX_HTTP_BAD_REQUEST) { | 411 } else if (error >= NGX_HTTP_MOVED_PERMANENTLY |
412 && error < NGX_HTTP_LAST_LEVEL_300) | |
413 { | |
406 /* 3XX */ | 414 /* 3XX */ |
407 err = error - NGX_HTTP_MOVED_PERMANENTLY + NGX_HTTP_LEVEL_200; | 415 err = error - NGX_HTTP_MOVED_PERMANENTLY + NGX_HTTP_LEVEL_200; |
408 | 416 |
409 } else if (error < NGX_HTTP_OWN_CODES) { | 417 } else if (error >= NGX_HTTP_BAD_REQUEST |
418 && error < NGX_HTTP_LAST_LEVEL_400) | |
419 { | |
410 /* 4XX */ | 420 /* 4XX */ |
411 err = error - NGX_HTTP_BAD_REQUEST + NGX_HTTP_LEVEL_200 | 421 err = error - NGX_HTTP_BAD_REQUEST + NGX_HTTP_LEVEL_200 |
412 + NGX_HTTP_LEVEL_300; | 422 + NGX_HTTP_LEVEL_300; |
413 | 423 |
414 } else { | 424 } else if (error >= NGX_HTTP_OWN_CODES |
425 && error < NGX_HTTP_LAST_LEVEL_500) | |
426 { | |
415 /* 49X, 5XX */ | 427 /* 49X, 5XX */ |
416 err = error - NGX_HTTP_OWN_CODES + NGX_HTTP_LEVEL_200 | 428 err = error - NGX_HTTP_OWN_CODES + NGX_HTTP_LEVEL_200 |
417 + NGX_HTTP_LEVEL_300 | 429 + NGX_HTTP_LEVEL_300 |
418 + NGX_HTTP_LEVEL_400; | 430 + NGX_HTTP_LEVEL_400; |
419 switch (error) { | 431 switch (error) { |
421 case NGX_HTTPS_CERT_ERROR: | 433 case NGX_HTTPS_CERT_ERROR: |
422 case NGX_HTTPS_NO_CERT: | 434 case NGX_HTTPS_NO_CERT: |
423 r->err_status = NGX_HTTP_BAD_REQUEST; | 435 r->err_status = NGX_HTTP_BAD_REQUEST; |
424 break; | 436 break; |
425 } | 437 } |
438 | |
439 } else { | |
440 /* unknown code, zero body */ | |
441 err = 0; | |
426 } | 442 } |
427 | 443 |
428 return ngx_http_send_special_response(r, clcf, err); | 444 return ngx_http_send_special_response(r, clcf, err); |
429 } | 445 } |
430 | 446 |
449 | 465 |
450 if (ngx_http_complex_value(r, &err_page->value, &uri) != NGX_OK) { | 466 if (ngx_http_complex_value(r, &err_page->value, &uri) != NGX_OK) { |
451 return NGX_ERROR; | 467 return NGX_ERROR; |
452 } | 468 } |
453 | 469 |
454 if (err_page->value.lengths) { | |
455 ngx_http_split_args(r, &uri, &args); | |
456 | |
457 } else { | |
458 args = err_page->args; | |
459 } | |
460 | |
461 if (uri.data[0] == '/') { | 470 if (uri.data[0] == '/') { |
471 | |
472 if (err_page->value.lengths) { | |
473 ngx_http_split_args(r, &uri, &args); | |
474 | |
475 } else { | |
476 args = err_page->args; | |
477 } | |
462 | 478 |
463 if (r->method != NGX_HTTP_HEAD) { | 479 if (r->method != NGX_HTTP_HEAD) { |
464 r->method = NGX_HTTP_GET; | 480 r->method = NGX_HTTP_GET; |
465 r->method_name = ngx_http_get_name; | 481 r->method_name = ngx_http_get_name; |
466 } | 482 } |