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