Mercurial > hg > nginx-ranges
comparison src/http/modules/ngx_http_rewrite_module.c @ 54:bcb5fce0b038 NGINX_0_1_27
nginx 0.1.27
*) Feature: the "blocked" parameter of the "valid_referers" directive.
*) Change: the errors while handling the request header now logged at
"info" level. The server name and the "Host" and "Referer" header
lines also logged.
*) Change: the "Host" header line is also logged in error log.
*) Feature: the proxy_pass_unparsed_uri directive. The special handling
of the "://" symbols in URI, appeared in 0.1.11 version, now is
canceled.
*) Bugfix: nginx could not be built on FreeBSD and Linux, if the
--without-ngx_http_auth_basic_module configuration parameter was
used.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 28 Mar 2005 00:00:00 +0400 |
parents | 72eb30262aac |
children | 3050baa54a26 |
comparison
equal
deleted
inserted
replaced
53:b6565ddf033b | 54:bcb5fce0b038 |
---|---|
34 ngx_uint_t stack_size; | 34 ngx_uint_t stack_size; |
35 | 35 |
36 ngx_flag_t log; | 36 ngx_flag_t log; |
37 | 37 |
38 ngx_flag_t no_referer; | 38 ngx_flag_t no_referer; |
39 ngx_flag_t blocked_referer; | |
39 } ngx_http_rewrite_loc_conf_t; | 40 } ngx_http_rewrite_loc_conf_t; |
40 | 41 |
41 | 42 |
42 typedef struct { | 43 typedef struct { |
43 ngx_http_rewrite_code_pt code; | 44 ngx_http_rewrite_code_pt code; |
376 e->buf.len = code->size; | 377 e->buf.len = code->size; |
377 | 378 |
378 if (code->uri) { | 379 if (code->uri) { |
379 if (!code->break_cycle) { | 380 if (!code->break_cycle) { |
380 r->uri_changed = 1; | 381 r->uri_changed = 1; |
382 r->valid_unparsed_uri = 1; | |
381 } | 383 } |
382 | 384 |
383 if (rc && (r->quoted_uri || r->plus_in_uri)) { | 385 if (rc && (r->quoted_uri || r->plus_in_uri)) { |
384 e->buf.len += 2 * ngx_escape_uri(NULL, r->uri.data, r->uri.len, | 386 e->buf.len += 2 * ngx_escape_uri(NULL, r->uri.data, r->uri.len, |
385 NGX_ESCAPE_ARGS); | 387 NGX_ESCAPE_ARGS); |
713 e->sp->text.len = 0; | 715 e->sp->text.len = 0; |
714 e->sp->text.data = (u_char *) ""; | 716 e->sp->text.data = (u_char *) ""; |
715 e->sp++; | 717 e->sp++; |
716 | 718 |
717 return; | 719 return; |
720 | |
718 } else { | 721 } else { |
719 e->sp->value = 1; | 722 e->sp->value = 1; |
720 e->sp->text.len = 1; | 723 e->sp->text.len = 1; |
721 e->sp->text.data = (u_char *) "1"; | 724 e->sp->text.data = (u_char *) "1"; |
722 e->sp++; | 725 e->sp++; |
729 ref = r->headers_in.referer->value.data; | 732 ref = r->headers_in.referer->value.data; |
730 | 733 |
731 if (len < sizeof("http://i.ru") - 1 | 734 if (len < sizeof("http://i.ru") - 1 |
732 || (ngx_strncasecmp(ref, "http://", 7) != 0)) | 735 || (ngx_strncasecmp(ref, "http://", 7) != 0)) |
733 { | 736 { |
734 e->sp->value = 1; | 737 if (cf->blocked_referer) { |
735 e->sp->text.len = 1; | 738 e->sp->value = 0; |
736 e->sp->text.data = (u_char *) "1"; | 739 e->sp->text.len = 0; |
737 e->sp++; | 740 e->sp->text.data = (u_char *) "0"; |
738 | 741 e->sp++; |
739 return; | 742 |
743 return; | |
744 | |
745 } else { | |
746 e->sp->value = 1; | |
747 e->sp->text.len = 1; | |
748 e->sp->text.data = (u_char *) "1"; | |
749 e->sp++; | |
750 | |
751 return; | |
752 } | |
740 } | 753 } |
741 | 754 |
742 len -= 7; | 755 len -= 7; |
743 ref += 7; | 756 ref += 7; |
744 | 757 |
851 } | 864 } |
852 | 865 |
853 conf->stack_size = NGX_CONF_UNSET_UINT; | 866 conf->stack_size = NGX_CONF_UNSET_UINT; |
854 conf->log = NGX_CONF_UNSET; | 867 conf->log = NGX_CONF_UNSET; |
855 conf->no_referer = NGX_CONF_UNSET; | 868 conf->no_referer = NGX_CONF_UNSET; |
869 conf->blocked_referer = NGX_CONF_UNSET; | |
856 | 870 |
857 return conf; | 871 return conf; |
858 } | 872 } |
859 | 873 |
860 | 874 |
871 ngx_conf_merge_unsigned_value(conf->stack_size, prev->stack_size, 10); | 885 ngx_conf_merge_unsigned_value(conf->stack_size, prev->stack_size, 10); |
872 | 886 |
873 if (conf->referers == NULL) { | 887 if (conf->referers == NULL) { |
874 conf->referers = prev->referers; | 888 conf->referers = prev->referers; |
875 ngx_conf_merge_value(conf->no_referer, prev->no_referer, 0); | 889 ngx_conf_merge_value(conf->no_referer, prev->no_referer, 0); |
890 ngx_conf_merge_value(conf->blocked_referer, prev->blocked_referer, 0); | |
876 } | 891 } |
877 | 892 |
878 if (conf->no_referer == NGX_CONF_UNSET) { | 893 if (conf->no_referer == NGX_CONF_UNSET) { |
879 conf->no_referer = 0; | 894 conf->no_referer = 0; |
895 } | |
896 | |
897 if (conf->blocked_referer == NGX_CONF_UNSET) { | |
898 conf->blocked_referer = 0; | |
880 } | 899 } |
881 | 900 |
882 if (conf->codes == NULL) { | 901 if (conf->codes == NULL) { |
883 return NGX_CONF_OK; | 902 return NGX_CONF_OK; |
884 } | 903 } |
1538 if (ngx_strcmp(value[i].data, "none") == 0) { | 1557 if (ngx_strcmp(value[i].data, "none") == 0) { |
1539 lcf->no_referer = 1; | 1558 lcf->no_referer = 1; |
1540 continue; | 1559 continue; |
1541 } | 1560 } |
1542 | 1561 |
1562 if (ngx_strcmp(value[i].data, "blocked") == 0) { | |
1563 lcf->blocked_referer = 1; | |
1564 continue; | |
1565 } | |
1566 | |
1543 if (ngx_strcmp(value[i].data, "server_names") == 0) { | 1567 if (ngx_strcmp(value[i].data, "server_names") == 0) { |
1544 server_names = 1; | 1568 server_names = 1; |
1545 continue; | 1569 continue; |
1546 } | 1570 } |
1547 | 1571 |