changeset 864:7521e5f5d555

use host part in URL
author Igor Sysoev <igor@sysoev.ru>
date Thu, 23 Nov 2006 20:20:23 +0000
parents 57cb2052dcc6
children 797b54c6425b
files src/http/ngx_http_parse.c src/http/ngx_http_request.c src/http/ngx_http_variables.c
diffstat 3 files changed, 22 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -260,7 +260,7 @@ ngx_http_parse_request_line(ngx_http_req
         case sw_schema_slash_slash:
             switch (ch) {
             case '/':
-                r->host_start = p;
+                r->host_start = p + 1;
                 state = sw_host;
                 break;
             default:
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -1385,8 +1385,15 @@ ngx_http_find_virtual_server(ngx_http_re
     ngx_http_core_loc_conf_t  *clcf;
     ngx_http_core_srv_conf_t  *cscf;
 
-    host = r->headers_in.host->value.data;
-    len = r->headers_in.host_name_len;
+    host = r->host_start;
+
+    if (host == NULL) {
+        host = r->headers_in.host->value.data;
+        len = r->headers_in.host_name_len;
+
+    } else {
+        len = r->host_end - host;
+    }
 
     if (vn->hash.buckets) {
         cscf = ngx_hash_find(&vn->hash, hash, host, len);
--- a/src/http/ngx_http_variables.c
+++ b/src/http/ngx_http_variables.c
@@ -667,13 +667,20 @@ static ngx_int_t
 ngx_http_variable_host(ngx_http_request_t *r, ngx_http_variable_value_t *v,
     uintptr_t data)
 {
-    if (r->headers_in.host) {
-        v->len = r->headers_in.host_name_len;
-        v->data = r->headers_in.host->value.data;
+    if (r->host_start == NULL) {
+
+        if (r->headers_in.host) {
+            v->len = r->headers_in.host_name_len;
+            v->data = r->headers_in.host->value.data;
+
+        } else {
+            v->len = r->server_name.len;
+            v->data = r->server_name.data;
+        }
 
     } else {
-        v->len = r->server_name.len;
-        v->data = r->server_name.data;
+        v->len = r->host_end - r->host_start;
+        v->data = r->host_start;
     }
 
     v->valid = 1;