0

我目前正在开发个人网站。这不是我第一次这样做,但这是我第一次尝试实施 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 的主机名,因此我可以测试站点而无需使用localhost. 它对任何东西的功能都没有真正的影响,只是充当一个更漂亮的主机名来使用。

4

1 回答 1

0

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

于 2012-11-09T06:16:17.420 回答