SSI: неудачное сравнение строк с переменной среды CGI

Сейчас я работаю над созданием персонального сайта. Я делаю это не в первый раз, но это моя первая крупная попытка реализовать SSI. Однако я наткнулся на стену с директивой if-else, которая использует одну из переменных среды CGI как часть сравнения.

Даже после некоторых ограниченных попыток отладки все выходные данные и документация, которые у меня есть, означают, что сделанные сравнения должны потерпеть неудачу. Это не так, и директива if-else делает неправильную оценку.

Вот код в файле index.shtml:

<head>
    <!--#set var="page" value="Home" -->
    <!--#include file="headlinks.shtml" -->
    <style>
        img#ref { float: right; margin-left: 8px; border-width: 0px;  }
    </style>
</head>

Вот код в файле headlinks.shtml:

<title><!--#echo var="page" --> &ndash; <!--#echo var="HTTP_HOST" --></title>
<!--#set var="docroot" value="${DOCUMENT_ROOT}" -->
<!--#echo var="docroot" -->
<!--#if expr="( $docroot != '/Applications/MAMP/htdocs' ) || ( $docroot != '/home/dragarch/public_html' )" -->
    <link rel="stylesheet" type="text/css" href="../style.css">
    <link rel="shortcut icon" type="image/svg+xml" href="../favicon.svg" />
<!--#else -->
    <link rel="stylesheet" type="text/css" href="style.css">
    <link rel="shortcut icon" type="image/svg+xml" href="favicon.svg" />
<!--#endif -->

А вот вывод для файла index.shtml:

    <title>Home &ndash; dragarch</title>

/Applications/MAMP/htdocs

    <link rel="stylesheet" type="text/css" href="../style.css">
    <link rel="shortcut icon" type="image/svg+xml" href="../favicon.svg" />

И style.css, и favicon.svg находятся в корне документа с index.shtml, поэтому директива if должна завершиться ошибкой и по умолчанию будет использоваться выход директивы else. Как вы можете видеть, хотя корень документа (который в настоящее время является папкой MAMP htdocs в моей собственной записной книжке) верен в соответствии с выводом директивы echo, сравнение в директиве if-else не позволяет правильно сравнить строки.

Я использую эту страницу для своей документации: http://httpd.apache.org/docs/2.2/mod/mod_include.html

Я в полной растерянности относительно того, почему это так, и мне нужна небольшая помощь здесь.

EDIT: я должен отметить, что dragarch — это имя хоста, которое я настроил в /etc/hosts так, чтобы оно указывало на 127.0.0.1, чтобы я мог протестировать сайт без использования localhost. Это не имеет никакого реального влияния на функциональность чего бы то ни было, кроме как просто действовать как более красивое имя хоста для использования.


ssi
person Calyo Delphi    schedule 09.11.2012    source источник


Ответы (1)


Простая проверка: попробуйте разделить оператор if на два условных оператора перед оператором else. Посмотрите, какой из них неправильно оценивается как истинный. Если оба условия выполняются, вам нужно дважды проверить, как оцениваются условные операторы. Возможно, они оба возвращают true из-за оператора expr =? Я ни черта не знаю о ssi, но я знаю, что в некоторых языках выражение var_name = всегда верно, а == является сравнением.

person Community    schedule 09.11.2012
comment
Выражение= является частью синтаксиса директивы if. Все, что находится в кавычках после expr=, является проверяемым условием. - person Calyo Delphi; 09.11.2012
comment
Спасибо за вклад и полученное прозрение. :) Просто нужно превратить это в выражение xor. - person Calyo Delphi; 09.11.2012
comment
Пожалуйста! Я активно обучаю студентов курсу общего инженерного программирования каждую неделю, поэтому было естественно ухватиться за возможность помочь, даже если все, что я сделал, это заставил вас немного переосмыслить свой код ‹.‹ - person ; 09.11.2012