SSI:与CGI环境变量的字符串比较失败

时间:2012-11-09 05:44:32

标签: ssi

我目前正在开发个人网站。这不是我第一次这样做,但这是我第一次尝试实施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.cssfavicon.svg都在index.shtml的文档根目录中,因此if指令应该失败并默认为else指令的输出。正如您所看到的,虽然根据echo指令的输出,文档根目录(当前是我自己笔记本上的MAMP htdocs文件夹)是正确的,但if-else指令中的比较无法正确比较字符串。

我正在将此页面用于我的文档:http://httpd.apache.org/docs/2.2/mod/mod_include.html

我完全不知道为什么会这样,需要一些帮助。

编辑:我应该注意dragarch是我在/etc/hosts中配置为指向127.0.0.1的主机名,因此我可以测试该网站而无需使用{ {1}}。它对任何东西的功能都没有实际影响,除了只是作为一个更漂亮的主机名使用。

1 个答案:

答案 0 :(得分:0)

简单检查:尝试将if语句拆分为其他条件之前的两个条件。查看哪一个被错误地评估为真。如果两个条件都是,那么您需要仔细检查条件的评估方式。也许由于expr =语句它们都返回true?我不知道关于ssi的一件坏事但我知道在某些语言中,说var_name =总是为真,而= =是比较。