Mercurial > hg > nginx
comparison src/http/ngx_http_core_module.c @ 3094:501fd3ae3188 stable-0.7
merge r2980, r2981, r2982:
win32 fixes:
*) ngx_http_set_exten() is always successful since 0.3.46
*) skip URI trailing dots under Win32
*) use caseless regex locations on caseless filesystems: MacOSX, Win32, Cygwin
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 07 Sep 2009 10:01:26 +0000 |
parents | 7d8667499ddc |
children | 9aa8fd2d5a00 |
comparison
equal
deleted
inserted
replaced
3093:5795b2710eef | 3094:501fd3ae3188 |
---|---|
1218 | 1218 |
1219 p = ngx_copy(r->uri.data, clcf->name.data, alias); | 1219 p = ngx_copy(r->uri.data, clcf->name.data, alias); |
1220 ngx_memcpy(p, name, path.len); | 1220 ngx_memcpy(p, name, path.len); |
1221 } | 1221 } |
1222 | 1222 |
1223 if (ngx_http_set_exten(r) != NGX_OK) { | 1223 ngx_http_set_exten(r); |
1224 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); | |
1225 return NGX_OK; | |
1226 } | |
1227 | 1224 |
1228 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, | 1225 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
1229 "try file uri: \"%V\"", &r->uri); | 1226 "try file uri: \"%V\"", &r->uri); |
1230 | 1227 |
1231 r->phase_handler++; | 1228 r->phase_handler++; |
1631 | 1628 |
1632 return NGX_OK; | 1629 return NGX_OK; |
1633 } | 1630 } |
1634 | 1631 |
1635 | 1632 |
1636 ngx_int_t | 1633 void |
1637 ngx_http_set_exten(ngx_http_request_t *r) | 1634 ngx_http_set_exten(ngx_http_request_t *r) |
1638 { | 1635 { |
1639 ngx_int_t i; | 1636 ngx_int_t i; |
1640 | 1637 |
1641 r->exten.len = 0; | 1638 r->exten.len = 0; |
1645 if (r->uri.data[i] == '.' && r->uri.data[i - 1] != '/') { | 1642 if (r->uri.data[i] == '.' && r->uri.data[i - 1] != '/') { |
1646 | 1643 |
1647 r->exten.len = r->uri.len - i - 1; | 1644 r->exten.len = r->uri.len - i - 1; |
1648 r->exten.data = &r->uri.data[i + 1]; | 1645 r->exten.data = &r->uri.data[i + 1]; |
1649 | 1646 |
1650 break; | 1647 return; |
1651 | 1648 |
1652 } else if (r->uri.data[i] == '/') { | 1649 } else if (r->uri.data[i] == '/') { |
1653 break; | 1650 return; |
1654 } | 1651 } |
1655 } | 1652 } |
1656 | 1653 |
1657 return NGX_OK; | 1654 return; |
1658 } | 1655 } |
1659 | 1656 |
1660 | 1657 |
1661 ngx_int_t | 1658 ngx_int_t |
1662 ngx_http_send_header(ngx_http_request_t *r) | 1659 ngx_http_send_header(ngx_http_request_t *r) |
2077 | 2074 |
2078 sr->unparsed_uri = r->unparsed_uri; | 2075 sr->unparsed_uri = r->unparsed_uri; |
2079 sr->method_name = ngx_http_core_get_method; | 2076 sr->method_name = ngx_http_core_get_method; |
2080 sr->http_protocol = r->http_protocol; | 2077 sr->http_protocol = r->http_protocol; |
2081 | 2078 |
2082 if (ngx_http_set_exten(sr) != NGX_OK) { | 2079 ngx_http_set_exten(sr); |
2083 return NGX_ERROR; | |
2084 } | |
2085 | 2080 |
2086 sr->main = r->main; | 2081 sr->main = r->main; |
2087 sr->parent = r; | 2082 sr->parent = r; |
2088 sr->post_subrequest = ps; | 2083 sr->post_subrequest = ps; |
2089 sr->read_event_handler = ngx_http_request_empty_handler; | 2084 sr->read_event_handler = ngx_http_request_empty_handler; |
2158 } | 2153 } |
2159 | 2154 |
2160 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, | 2155 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
2161 "internal redirect: \"%V?%V\"", uri, &r->args); | 2156 "internal redirect: \"%V?%V\"", uri, &r->args); |
2162 | 2157 |
2163 if (ngx_http_set_exten(r) != NGX_OK) { | 2158 ngx_http_set_exten(r); |
2164 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); | |
2165 return NGX_DONE; | |
2166 } | |
2167 | 2159 |
2168 /* clear the modules contexts */ | 2160 /* clear the modules contexts */ |
2169 ngx_memzero(r->ctx, sizeof(void *) * ngx_http_max_module); | 2161 ngx_memzero(r->ctx, sizeof(void *) * ngx_http_max_module); |
2170 | 2162 |
2171 cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module); | 2163 cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module); |
2563 ngx_str_t err; | 2555 ngx_str_t err; |
2564 u_char errstr[NGX_MAX_CONF_ERRSTR]; | 2556 u_char errstr[NGX_MAX_CONF_ERRSTR]; |
2565 | 2557 |
2566 err.len = NGX_MAX_CONF_ERRSTR; | 2558 err.len = NGX_MAX_CONF_ERRSTR; |
2567 err.data = errstr; | 2559 err.data = errstr; |
2560 | |
2561 #if (NGX_HAVE_CASELESS_FILESYSTEM) | |
2562 caseless = 1; | |
2563 #endif | |
2568 | 2564 |
2569 clcf->regex = ngx_regex_compile(regex, caseless ? NGX_REGEX_CASELESS: 0, | 2565 clcf->regex = ngx_regex_compile(regex, caseless ? NGX_REGEX_CASELESS: 0, |
2570 cf->pool, &err); | 2566 cf->pool, &err); |
2571 | 2567 |
2572 if (clcf->regex == NULL) { | 2568 if (clcf->regex == NULL) { |