Знатоки SSI, подскажите, пожалуйста

regta
На сайте с 15.04.2006
Offline
320
745

Здравствуйте!

Вот такая проблема:

Есть ssi-документ

site.ru/mama-papa.shtml

в нем идет такой запрос:

<!--#include virtual="/text.shtml" -->

В самом файле text.shtml

такое:

<!--#if expr="$DOCUMENT_URI=/papa.shtml/" -->Отец<!--#endif -->

<!--#if expr="$DOCUMENT_URI=/mama-papa.shtml/" -->Мама и Папа<!--#endif -->

При запросе страницы site.ru/mama-papa.shtml

вместо ожидаемого

Мама и Папа

выводится:

Отец Мама и Папа

--------------------------------

почему так? и как с этим бороться?

--------------------------------

Буду очень признателен за помощь, спасибо!

Цитируйте, плиз, историю переписки в личке. Спасибо.
[Удален]
#1

А при запросе site.ru/papa.shtml что выводится?

regta
На сайте с 15.04.2006
Offline
320
#2
Cat_Out:
А при запросе site.ru/papa.shtml что выводится?

Выводится то что и должно:

Отец

т.е. срабатывает только только одна команда

<!--#if expr="$DOCUMENT_URI=/papa.shtml/" -->Отец<!--#endif -->

а не две, как при запросе mama-papa.shtml

[Удален]
#3

Здесь нет ответа на ваш вопрос: nginx.org/ru/docs/http/ngx_http_ssi_module.html#commands ?

wwwwww
На сайте с 29.04.2011
Offline
195
#4

потерто...

Видишь? Свободная подпись.
[Удален]
#5

wwwwww, при этом запросу site.ru/papa.shtml слэш не мешает.

wwwwww
На сайте с 29.04.2011
Offline
195
#6
regta:
<!--#if expr="$DOCUMENT_URI=/mama-papa.shtml/" -->Мама и Папа<!--#endif -->

В конце лишний слеш. В пути нет слеша.

Изивнияюсь за дубль. Форум притормаживает.

Мое утверждение по слешам снимаю. Ошибся.

Cat_Out:
при этом запросу site.ru/papa.shtml слэш не мешает.

Нужно сам сайт посмотреть. Странно это.

5 лет уже не занимался SSI. Надо читнуть.

Предалагаю вывести <!--#echo var="DOCUMENT_URI" --> и сравнить с тем, что Вы пытаетесь сравнить.

[Удален]
#7

Не знаю, как вы отнесетесь к моему совету, но исходя из женской логики я бы поступила так:

Оба запроса очень похожи, и я бы поэкспериментировала - поменяла местами слова Отец и Папа, поменяла местами строчки, удалила одну строчку и попробовала бы то с одной такой, то с одной другой, пока не докопалась до результата.

wwwwww
На сайте с 29.04.2011
Offline
195
#8

ТС, вот рабочий вариант:

<!--#if expr="$DOCUMENT_URI = /^\/papa.shtml/" -->Отец<!--#endif -->
<!--#if expr="$DOCUMENT_URI = /^\/mama-papa.shtml/" -->Мама и Папа<!--#endif -->



---------- Добавлено 20.10.2012 в 22:11 ----------

Cat_Out:
Не знаю, как вы отнесетесь к моему совету, но исходя из женской логики я бы поступила так:

Не стоит с такой логикой в программирование.

regta
На сайте с 15.04.2006
Offline
320
#9
wwwwww:
ТС, вот рабочий вариант:

Что-то он не заработал :(

Но проблему удалось решить при помощи команды #elif

Интересно, что если сделать так:

<!--#if expr="$DOCUMENT_URI=/papa.shtml/" -->Отец

<!--#elif expr="$DOCUMENT_URI=/mama-papa.shtml/" -->Мама и Папа

<!--#else --> <!--#endif -->

То на обеих страницах выводится одинаково:

Отец

А правильный вариант получается только, если порядок выставлен верно:

<!--#if expr="$DOCUMENT_URI=/mama-papa.shtml/" -->Мама и Папа

<!--#elif expr="$DOCUMENT_URI=/papa.shtml/" -->Отец

<!--#else --> <!--#endif -->

Вот так вот - все как и требуется.

Дело видимо в том, что, $DOCUMENT_URI - оценивает "вхождение", а не "полное соответствие"

т.е.

команда: <!--#if expr="$DOCUMENT_URI=/papa.shtml/" -->Отец<!--#endif -->

будет обработана для всех урлов вида: *papa.shtml

mama-papa.shtml

deda-papa.shtml

1234597890papa.shtml

... и т.п.

wwwwww
На сайте с 29.04.2011
Offline
195
#10
regta:
А правильный вариант получается только, если порядок выставлен верно:

<!--#if expr="$DOCUMENT_URI=/mama-papa.shtml/" -->Мама и Папа
<!--#elif expr="$DOCUMENT_URI=/papa.shtml/" -->Отец
<!--#else --> <!--#endif -->

Я долгое время не мог понять, зачем писать

/mama-papa.shtml/

На места расставила все вот эта статья, рекомендую http://www.zytrax.com/tech/web/ssi.htm#tests

Цитата

string1=string2 TRUE if string1 is equal to string2.
If string2 is written /string2/ it is interpreted as a regular expression (see here) e.g /MSIE/ will find MSIE anywhere in string1.

/string/ - это строка - регулярное выражение, естественно, что будут найдены все вхождения. Чтобы работать со строкой нужно делать 'string'.

В переменной $DOCUMENT_URI нахотся УРЛ со / в начале строки.

Итого имеем правильный рабочий вариант без костылей:

<!--#if expr="$DOCUMENT_URI = '/papa.shtml'" -->Отец<!--#endif -->
<!--#if expr="$DOCUMENT_URI = '/mama-papa.shtml'" -->Мама и Папа<!--#endif -->
<!--#echo var="DOCUMENT_URI" -->

Все файлы создал, проверил. Все работает, если нужно прицеплю.

Строку

<!--#echo var="DOCUMENT_URI" -->
удалить после тестирования, для отладки.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий