2017-01-30 1 views
1

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

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

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

+0

почему downvote? это не понятно кому-то? – andi

ответ

3

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

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

Я не уверен в \ перед ?.

+0

спасибо, что сработало! – andi

+0

прохладный. вам нужно '\', чтобы избежать '?' в конце? – mofoe

+0

Да, я избежал вопросительного знака. – andi

1

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

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

SCRIPT_NAME, кажется, работает тоже:

<!--#echo var="SCRIPT_NAME" --> 
+0

спасибо, но '' возвращает URI сервера, а не URI, который пользователь вводил в свой браузер (у нас есть некоторые перезаписи nginx, которые делают эти значения разными). И '' just returns '(none)'. – andi

+0

я вижу. странно, что 'SCRIPT_NAME' отображает' (none) '. Вы пытались «PATH_INFO» (другая переменная CGI)? – mofoe

1

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

<!--#if expr="$REQUEST_URI = /([^?]+)\?.*/" --> 
    <!--#set var="URL_WITHOUT_QUERY_STRING" value="$1" --> 
    <!--#echo var='URL_WITHOUT_QUERY_STRING' --> 
<!--#endif --> 
Смежные вопросы