Как получить переменную SSI REQUEST_URI без параметров запроса

Я пытаюсь получить часть пути REQUEST_URI без параметров запроса. Мне нужно сделать это в сыром SSI, без PHP или чего-то еще.

Если я сделаю что-то вроде <!--#echo var="REQUEST_URI" -->, это выведет имя пути плюс параметры запроса, поэтому, если URL-адрес браузера показывает http://example.com/foo.html?bar, это вернет /foo.html?bar. Но мне нужно вернуть только /foo.html. Есть ли способ сделать это непосредственно внутри оператора echo?

Примечание. Необходимо использовать только запрошенный uri. Фактические пути к файлам на сервере сильно отличаются, и я не могу их отобразить.


person andi    schedule 30.01.2017    source источник


Ответы (3)


У меня нет бегущего nginx с SSI, так что я просто предполагаю. Но, может быть, вы можете попробовать использовать регулярное выражение, чтобы извлечь то, что вы хотите. Может быть, что-то вроде этого:

<!--# if expr="$REQUEST_URI = /(.+)\?.*/" -->
    <!--# echo var="1" -->
<!--# endif -->

Я не уверен насчет \ до ?.

person mofoe    schedule 30.01.2017
comment
Для будущих запутавшихся людей / нужно экранировать, как если бы вы объявляли регулярные выражения javascript. - person ThorSummoner; 11.08.2017

Вместо этого вы можете попробовать использовать переменную DOCUMENT_URI:

<!--#echo var="DOCUMENT_URI" -->

SCRIPT_NAME тоже работает:

<!--#echo var="SCRIPT_NAME" --> 
person mofoe    schedule 30.01.2017
comment
спасибо, но <!--#echo var="DOCUMENT_URI" --> возвращает URI сервера, а не URI, который пользователь ввел в свой браузер (у нас есть некоторые перезаписи nginx, которые делают эти значения разными). И <!--#echo var="SCRIPT_NAME" --> просто возвращает (none). - person andi; 30.01.2017
comment
понятно. странно, что SCRIPT_NAME отображает (none). Вы пробовали PATH_INFO (другая переменная CGI)? - person mofoe; 30.01.2017

Этот код работает для меня:

<!--#if expr="$REQUEST_URI = /([^?]+)\?.*/" -->
    <!--#set var="URL_WITHOUT_QUERY_STRING" value="$1" -->
    <!--#echo var='URL_WITHOUT_QUERY_STRING' -->
<!--#endif -->
person jcde_1974    schedule 01.06.2017