SSI (Server Side Includes) 入門教學前言:SSI 是一個可以讓你使用動態網頁的技術. SSI 跟一般的HTML並沒太大的差別,
所以如果你會HTML應該很快就能了解他的用途和使用方法. 這篇教學會假設你用的是
Apache 主機. 有些主機不支援SSI, 而 Apache 也必須先啟動 SSI 才能使用, 所以最好先
確定你的主機是否能夠使用SSI.
SSI 可以讓你將小段的動態內容放到現有的HTML網頁, 而不需使用 CGI 或其他的動態技術.
如果你的網頁大部分的內容都是動態的, 你最好考慮用其他技術像 CGI 或 PHP.
設定 Apache 的 SSI 支援:第一 Apache 的 httpd.conf 執行檔必須要有下列命令:
Options +Includes
請確定上面的執行檔是放在你要執行SSI的檔案夾下面, 以免被其他的命令蓋過.
Apache 一開始並不會認為每一個網頁都是SSI網頁, 你必須告訴 Apache 哪一種副檔名是
SSI網頁. 通常 SSI 網頁的副檔名是 .shtml. 一樣在 httpd.conf 裡面加上:
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
用上面的方法有一個缺點, 如果你想在現有的 HTML 網頁加上 SSI 你就必須改他的檔名, 及所有
連結的網頁. 如果你是用 Windows 這是唯一的方法.
另一個方法是用 XBitHack 命令:
XBitHack on
XBitHack 會告訴 Apache 哪一些檔案是 SSI 檔, 如果檔案裡面有特殊的執行指令.
所以要在現有的HTML檔案使用 SSI 你可以用下面的指令:
chmod +x pagename.html
因為 Windows 沒有特殊的執行指令, 所以 XBitHack 不能用在 Windows 下.
基本 SSI 命令:基本的 SSI 語法是:
<!--#element attribute=value attribute=value-->
因為 SSI 語法是放在 HTML 的注解內所以如果不能使用 SSI 並不會對客戶端造成影響.
下面是一些 SSI 範例:
今天的日期<!--#echo var="DATE_LOCAL" -->
上面的 echo 元素會顯示後面的設定值. SSI 還包括許多內建的設定值. 你也可以用 config 來改變顯示的
變數, 譬如說改變上面所顯示的日期:
<!--#config timefmt="%A %B %d, %Y" -->
今天是 <!--#echo var="DATE_LOCAL" -->
檔案修改日期這個檔案的最後修改於 <!--#flastmod file="index.html" -->
你也可以用上面描述的方法改變日期顯示的格式. 如果你不想提供檔案名,
譬如說將 SSI 語法放到某個網頁來顯示此網頁的修改日期, 你可以用下面的方法:
<!--#config timefmt="%D" -->
這個檔案的最後修改於 <!--#echo var="LAST_MODIFIED" -->
包括 CGI 程式顯示的結果這是非常普通的方法, 如果你想讓 SSI 輸出 CGI 程式的結果, 像記數器等等:
<!--#include virtual="/cgi-bin/counter.pl" -->
包括標題/註尾如果你想在每個網頁放入標題或註尾, 你可以用 SSI 來自動幫你加上.
這樣只需要改一個檔案就可以改變全部網頁的標題/註尾.
SSI 的 include 元素可以用 file 或 virtual 屬性來決定包括哪個檔案.
file 屬性必須是相對的路徑, 也就是說一開始不能用 / 或 包括 ../ 在路徑內.
另一個辦法是用 virtual 屬性. virtual 屬性必須是相對路徑, 但一開始可以用 /.
不管用什麼方法, 檔案必須在 SSI 網頁的主機內.
<!--#include virtual="/footer.html" -->
包括的 SSI 網頁內也可以包括另一個 SSI 網頁.
設定變數用 set 命令可以讓你設定變數. 語法如下:
<!--#set var="name" value="Rich" -->
你也可以用 Apache 的 environment variable 或者是上面描述的變數 (LAST_MODIFIED 等等)
來指派給你設定的變數. 在變數前面加上 $ 來設定非字串常值. 使用方法如下:
<!--#set var="modified" value="$LAST_MODIFIED" -->
如果你的字串常值包括 $, 你可以用 \ 逸出字元.
<!--#set var="cost" value="\$100" -->
如果變數出現在字串的中間, 請將變數放入 { }, 像下面的方法:
<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->
條件運算式你可以用條件運算式來決定使用哪些 SSI 語法:
<!--#if expr="test_condition" -->
<!--#elif expr="test_condition" -->
<!--#else -->
<!--#endif -->
test_condition 可以是任何邏輯的比較運算子, 譬如說比較變數的值或測試 true 或 false.
在你的 httpd.conf 你可以加入:
BrowserMatchNoCase macintosh Mac
BroswerMatchNoCase MSIE InternetExplorer
這會設定變數 Mac 和 InternetExplorer 為 true, 如果使用的瀏覽器是其中一個.
然後在 SSI 網頁內你可以用下面方法:
<!--#if expr="${Mac} && ${InternetExplorer}" -->
瀏覽器是 Mac 或 IE
<!--#else -->
瀏覽器不是 Mac 或 IE
<!--#endif -->
上面描述的只是一小段 SSI 能為你做的動態網頁, 還有更多有趣的方法等著你去發掘.
資料來源: http://httpd.apache.org/docs-2.0/howto/ssi.html