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