2012-11-09 27 views
0

我目前正在开发个人网站。这不是我第一次这样做,但这是我第一次实施SSI。然而,我已经将自己投入到了一堵墙中,并且使用了一个if-else指令,该指令使用其中一个CGI环境变量作为其比较的一部分。SSI:与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主机名。它对任何东西的功能都没有实际影响,除了只是作为一个更漂亮的主机名来使用。

回答

0

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

+0

expr =是if指令语法的一部分。 expr =之后的引号内的所有内容都是正在测试的条件。 –

+0

感谢您的意见和产生的顿悟。 :)只需把它变成一个xor表达式即可。 –

+0

不客气!我每周都积极地为学生开设一个通用的工程编程课程,所以很自然地可以跳出帮助的机会,即使我所做的只是让您重新考虑您的代码。< – 2012-11-09 06:47:19