Re: SSI переменные $uri и $request_uri

Oleksandr V. Typlyns'kyi wangsamp на gmail.com
Чт Авг 25 23:49:56 UTC 2011


Today Aug 26, 2011 at 04:52 Denis F. Latypoff wrote:

> >>  # cat included.html
> >>  <!--#echo var="uri"-->
> >>  <!--#echo var="request_uri"-->
> >>
> >>  # wget -qO- "http://localhost/index.html" | less
> >>  /included.html
> >>  /index.html
> >>
> >>  Вот хотелось бы, чтобы uri тоже был 'index.html', то есть адрес
> >>  родительского запроса. Или это фича? Или бага? ))

> >   $uri, эта переменная равна текущему URI в запросе, он может отличаться от первоначального, например, при внутренних редиректах или при использовании индексных файлов.
> 
> Точно, спасибо. Похоже, получить первоначальный запрос без аргументов не получится...

  Почему же? Достаточно его сохранить в другой переменной:
  location / { ssi on; set $orig_uri $uri;}
  location = /included.html { ssi on; }

  cat included.html
  <!--#echo var="uri"-->
  <!--#echo var="request_uri"-->
  <!--#echo var="orig_uri"-->

  wget -qO- "http://localhost/index.html?a=1&b=2"
  /included.html
  /index.html?a=1&b=2
  /index.html

  Важный момент - /included.html должен быть в другом location, а то иначе set перепишет значение из $uri подзапроса.
  Или если это мифический shared hosting со сферическими непредсказуемыми URI, то можно и в rewrite style: 
  location / { ssi on; if ($orig_uri = "") {set $orig_uri $uri;} }

-- 
WNGS-RIPE



Подробная информация о списке рассылки nginx-ru