небольшой хак: новая переменная $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