ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

небольшой хак: новая переменная $request_uri_short


  • To: nginx-ru@xxxxxxxxx
  • Subject: небольшой хак: новая переменная $request_uri_short
  • From: Alrond <rusnginx@xxxxxxxxx>
  • Date: Tue, 23 Oct 2007 19:56:33 +0200
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; bh=NiLG9iF0F9d2Yx6mvpHZEp6NSKkKowRhaJPCtVEOGR8=; b=h1eL3JcdztJJrHPfnW+HWrfNuxvdtBW3c3mRrz5UMoM9PxEb+z7dJKWZhz51MjaBK5FpVzVxY/WFQS0+aUpuFOJ//aMvgHDsWL77L5C0zoC8cVfHu9d6DL/85oS08mKm65/t4L/L4Pd9Fg6jizy4WQtnUgR4APpCNlGTGqXKvXQ=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=tp4wuyqP3gB5+J58dYe9cRMDomHeuFBGT5icIr0rp4byT++Z6qFFguGOyMi0WVQGzGlw3ry882wRk7w7clhrCUofB6vAQleRP7FYGBUyNLNSPrjbXHOkrxqYz7bKu0JBczc6o3Rj7NsN9nAIh3/avJCFXreLtmRbiry8dxnJwDY=

Сделал тут недавно небольшой хак.
Наблюдал ситуацию, при которой переменная $uri принимает другое
значение. При этом $request_uri остается. Понятно что это происходит
после редиректа, но хотелось иметь отпарсенную URI именно
пользовательского запроса. Вот и ввел новую переменную
$request_uri_short.

Проблема:
При конфигурации с внутренним редиректом, в логи пишется $uri от
нового uri, а не от запрошенного. Эта ситуация была описана в
документации.

location / {
           rewrite  ^(.*)$  /xx/yy.html;
}

location ^~ /xx/ {
            internal;
            root html;
            access_log  logs/log_xx main;
}

Решение:
После хака добавляется новая переменная, равнозначная $uri при обычных
запросах и распарсенная $uri пользовательского запрса запроса:

$request_uri_short

1412:src/http/ngx_http_core_module.c
    sr->unparsed_uri = r->unparsed_uri;
    +sr->parsed_uri = r->parsed_uri;
142:src/http/ngx_http_variables.c
    { ngx_string("request_uri"), NULL, ngx_http_variable_request,
    offsetof(ngx_http_request_t, unparsed_uri), 0, 0 },
    +{ ngx_string("request_uri_short"), NULL, ngx_http_variable_request,
    +offsetof(ngx_http_request_t, parsed_uri), NGX_HTTP_VAR_NOCACHABLE, 0 },
355:src/http/ngx_http_request.h
    ngx_str_t                         unparsed_uri;
    +ngx_str_t                         parsed_uri;
676:src/http/ngx_http_request.c
    r->unparsed_uri.data = r->uri_start;
    +r->parsed_uri = r->uri;


 




Copyright © Lexa Software, 1996-2009.