Mercurial > hg > nginx
comparison src/http/modules/ngx_http_proxy_module.c @ 723:ceb5ef29b119
fix proxy_redirect with variable
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 26 Sep 2006 21:15:52 +0000 |
parents | b80f94fa2197 |
children | e3df50b4a4fd |
comparison
equal
deleted
inserted
replaced
722:0ca72814cb3f | 723:ceb5ef29b119 |
---|---|
1395 ngx_memzero(&e, sizeof(ngx_http_script_engine_t)); | 1395 ngx_memzero(&e, sizeof(ngx_http_script_engine_t)); |
1396 | 1396 |
1397 e.ip = pr->replacement.vars.lengths; | 1397 e.ip = pr->replacement.vars.lengths; |
1398 e.request = r; | 1398 e.request = r; |
1399 | 1399 |
1400 for (len = prefix; *(uintptr_t *) e.ip; len += lcode(&e)) { | 1400 len = prefix + h->value.len - pr->redirect.len; |
1401 | |
1402 while (*(uintptr_t *) e.ip) { | |
1401 lcode = *(ngx_http_script_len_code_pt *) e.ip; | 1403 lcode = *(ngx_http_script_len_code_pt *) e.ip; |
1404 len += lcode(&e); | |
1402 } | 1405 } |
1403 | 1406 |
1404 data = ngx_palloc(r->pool, len); | 1407 data = ngx_palloc(r->pool, len); |
1405 if (data == NULL) { | 1408 if (data == NULL) { |
1406 return NGX_ERROR; | 1409 return NGX_ERROR; |
1415 | 1418 |
1416 while (*(uintptr_t *) e.ip) { | 1419 while (*(uintptr_t *) e.ip) { |
1417 code = *(ngx_http_script_code_pt *) e.ip; | 1420 code = *(ngx_http_script_code_pt *) e.ip; |
1418 code(&e); | 1421 code(&e); |
1419 } | 1422 } |
1423 | |
1424 ngx_memcpy(e.pos, h->value.data + prefix + pr->redirect.len, | |
1425 h->value.len - pr->redirect.len - prefix); | |
1420 | 1426 |
1421 h->value.len = len; | 1427 h->value.len = len; |
1422 h->value.data = data; | 1428 h->value.data = data; |
1423 | 1429 |
1424 return NGX_OK; | 1430 return NGX_OK; |