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;
|