небольшой хак: новая переменная $request_uri_short
Alrond
rusnginx at gmail.com
Tue Oct 23 21:56:33 MSD 2007
Сделал тут недавно небольшой хак.
Наблюдал ситуацию, при которой переменная $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;
More information about the nginx-ru
mailing list