2012-11-09 38 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