用shtml來include網頁檔案(開啟SSI)
在網站構建過中。當我們遇到很多的內容為靜態頁面,而頁首與頁尾又經常要更換時,如果一直使用html檔案總會有很多的麻煩。因為批量修改起來很不方面,所以我們總希望能將頁尾與頁尾include到html檔案中來。html屬於用戶端解析形的格式化語言,自4.0後幾乎很難再有大的變動(畢竟很多瀏覽器只按4.0標準來解析),所以至今也沒include這樣的概念。而html的架構(frame與iframe)雖然可以用來包含首頁與頁尾檔案,但使用frame與iframe的概念與動態網頁面(asp,jsp,php等)的include那樣不同,frame與iframe的主體頁面與被包括的頁的不是一個頁面,而通過include的方式調用的頁面主體頁面與被包括的頁面仍然是一個頁面,這樣頁面再載入的時就沒速度的影響,更不會有多個視窗這樣的問題。當然frame與iframe的作用還是挺大的,只是這與include這樣包括頁面進來的概念不同。
除frame與iframe之外,常用的調用檔案的方法還有採用js。這與include概念倒是很接近,但可以需要用戶端js的支援,而且修改也不很方面,因為被包括的js是通過document.write來輸出html代碼,這樣雖然能達到效果,可js畢竟執行用戶端動態效果更好,比如現在較流行的AJAX。所以無論是frame/iframe還是js都與include不太一樣(倒是Dreamweaver中的library與include很像,可惜只能用在Dreamweaver中),而我們有時頁面有很多靜態頁面,內容不是動態且沒有規律可循,更不好做到資料庫裡去。如新浪的新聞之類的,這時我們可以採用shtml的方式來做這些頁面。--JarryLi in BeiJing
那什麼是shtml呢?
使用SSI(Server Side Include)的html副檔名,SSI(Server Side Include),通常稱為"伺服器端嵌入"或者叫"伺服器端包含",是一種類似於ASP的基於伺服器的網頁製作技術。預設副檔名是 .stm、.shtm 和 .shtml。
什麼是SSI?
SSI是英文Server Side Includes的縮寫,翻譯成中文就是伺服器端包含的意思。從技術角度上說,SSI就是在HTML檔案中,可以通過注釋行調用的命令或指標。SSI具有 強大的功能,只要使用一條簡單的SSI命令就可以實現整個網站的內容更新,時間和日期的動態顯示,以及執行shell和CGI指令碼程式等複雜的功能。 網站維護常常碰到的一個問題是,網站的結構已經固定,卻為了更新一點內容而不得不重做一大批網頁。SSI提供了一種簡單、有效方法來解決這一問題,它將 一個網站的基本結構放在幾個簡單的HTML檔案中(模板),以後我們要做的只是將文本傳到伺服器,讓程式按照模板自動產生網頁,從而使管理大型網站變得容易。
如何使你的Apache伺服器支援SSI?
Apache(如何在windows以及linuc下安裝apache請參見另兩篇文章)預設是不支援SSI的,需要我們更改httpd.conf來進行配置。我這裡以windows平台的Apache 2.0.x為例(在linux平台下與之相同),開啟conf目錄下的httpd.conf檔案,搜尋“AddType text/html .shtml”,找到:
# AddType text/html .shtml
# AddOutputFilter INCLUDES .shtml
把這兩行前面的#去掉 。
然後搜尋“Options Indexes FollowSymLinks”
在搜尋到的那一行後面添加“ Includes”
即將該行改變為 Options Indexes FollowSymLinks Includes
熟悉apache manual的可能會覺得比較容易。
儲存httpd.conf,重起apache即可
到此我們就完成了對Apache SSI的設定。
如何讓你的IIS伺服器支援SSI
windows 2000:
IIS裡添加一個應用程式副檔名映射
可執行檔:C:/WINDOWS/system32/inetsrv/ssinc.dll
副檔名:shtml/shtm
windows 2003 2003預設已經支援SSI(shtml檔案),只需在IIS的"Web服務擴充"裡設定"在伺服器端的包含檔案"為"允許" 即可IIS6.0對於SSI進行了一些改進,以前IIS5.0的一些程式遷移過後可能無法運用。
一個經常的出現問題是出現如下錯誤:
"處理 SSI 檔案時出錯 - Error processing SSI file"
經過測試,以下做法會導致這個錯誤:
1、伺服器實體路徑使用中文名。
2、包含檔案中使用中文名。
3、包含檔案不存在。
4、被包含的檔案再次包含使用中文名的檔案。
該錯誤在Unicode編碼時依舊,屬於IIS的問題。
解決方案:對於使用SSI的網站物理和URL地址都全部使用英文。
shtml檔案測試?
主體檔案,比如命名為test.shtml,內容為(把head.html與foot.html檔案包進來,與asp,jsp,php中的include相同)
<!--#i nclude file="head.html"--><hr><b>你好,這是中間的內容</b><hr><!--#i nclude file="foot.html"-->
頁首檔案,比如命名為head.html,內容為
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>Untitled Document</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body>
<div style="background-color:#00CC66;boder:1px groove orange ">我是頁首導覽列的公用資訊</div>
頁尾檔案,比如命名為foot.html,內容為
我是頁尾著作權資訊</body></html>
然後運行web server,在地址欄中開啟test.shtml檔案,就會得到一個完整的頁面,包括頭與尾檔案。
shtml中簡單的SSI命令
SSI具有強大的功能,只要使用一條簡單的SSI命令就可以實現整個網站的內容更新,時間和日期的動態顯示,以及執行shell和CGI指令碼程式等複雜的功能。比如我們修改上面提及的test.shtml檔案,加入以下代碼,將會顯示伺服器日期以及用戶端IP等:
<font color=red> 本文檔名稱: <br> <!--#e cho var="DOCUMENT_NAME"--> <br> 時區:<br> <!--#e cho var="DATE_LOCAL"--> <br> 你的IP地址是: <br> <!--#e cho var="REMOTE_ADDR"--><br> 今天是: <!--#c onfig timefmt="%A, %B %d, %Y"--> <!--#e cho var="LAST_MODIFIED" --> <br> </font>
SSI指令基本格式:
程式碼:
<!-– 指令名稱="指令參數">
<!--#i nclude file="head.htm"-->
說明:
1.<!-- -->是HTML文法中表示注釋,當WEB伺服器不支援SSI時,會忽略這些資訊。
2.#i nclude 為SSI指令之一。
3.file 為include的參數, info.htm為參數值,在本指令中指將要包含的文檔名。
注意:
1.<!--與#號間無空格,只有SSI指令與參數間存在空格。
2.上面的標點="",一個也不能少。
3.SSI指令是大小寫敏感的,因此參數必須是小寫才會起作用。
詳細可以查看SHTML詳細教程 ,通過SHTML可以減輕許多工作負擔哦。
另外:shtml檔案在網頁伺服器下運行才有效,直接用ie開啟將被當作是文字檔。
本文轉自建站學 http://www.jzxue.com ,轉載請註明出處。