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