Apache--SSI 服務器端包含

(參考apache手冊及百度百科:http://baike.baidu.com/view/188371.htm)
訪問靜態頁面時,頁面有一個模塊無法顯示並報錯“an error occurred while processing this directive”,查看原html文件,發現該處是通過SSI的命令include進來的:
<!--#include virtual="/html/attention/expo.html"-->  通過改正引入文件的路徑,成功引入。這裏做一下筆記:
【SSI】
     Server Side Include,服務器端嵌入(包含),以apache爲例,SSI是通過apche的mod_include模塊實現的,是指服務器將內容發送給瀏覽器之前,根據頁面中的指令,對頁面進行處理的過程。這是apache中文手冊的定義:'SSI是嵌入HTML頁面中的指令,在頁面被提供時由服務器進行運算,以對現有HTML頁面增加動態生成的內容,而無須通過CGI程序提供其整個頁面,或者使用其他動態技術。        
至於什麼時候應當用SSI,而什麼時候應當用某些程序生成整個頁面,取決於頁面中有多少內容是靜態的,又有多少內容需要在每次頁面被提供時重新計算SSI一種增加小段動態信息的好方法,比如當前時間。如果你的頁面大部分內容是在被提供時動態生成的,那就要另找方案了。

我遇到的是在文章頁引入“關注”模塊,文章是不變的,但是關注每天都不同,因此採用SSI,以便舊的文章頁的關注也能夠實時更新。

如何使你的Apache服務端支持SSI?

Apache默認是不支持SSI的,需要我們更改httpd.conf來進行配置。
我這裏以windows平臺的Apache 2.0.x爲例:打開conf目錄下的httpd.conf文件,
1. 搜索“AddType text/html .shtml”,搜索結果:  # AddType text/html .shtml  # AddOutputFilter INCLUDES .shtml  把這兩行前面的#去掉。  
       (解釋: 並非所有文件中的ssi指令都會被解析,必須告訴Apache應該解析哪些文件。如果我們的指令放在了.htm類型的文件中,那麼就需要在上面兩條命令中分別加入.htm一項,否則便不會解析未指定的文件中的ssi命令。 因爲命令是放在註釋中的,故不解析的將顯示空。
          有兩種方法使Apache解析帶有特定後綴名的文件,上面這是一種,另一種是使用 xBitHack命令,詳見apache手冊)
2. 然後搜索“Options Indexes FollowSymLinks”  在搜索到的那一行後面添加“ Includes”  即將該行改變爲:  Options Indexes FollowSymLinks Includes

SSI指令基本格式

  程序代碼:   <!-– 指令名稱="指令參數">
         如 程序代碼:   <!--#include file="info.htm"-->
         說明: 1.<!-- -->;是HTML語法中表示註釋,當WEB服務器不支持SSI時,會忽略這些信息。  
              2.#include 爲SSI指令之一。  
              3.file 爲include的參數,info.htm爲參數值,在本指令中指將要包含的文檔名。  
         注意: 1.<!--與#號間無空格,只有SSI指令與參數間存在空格。  
              2.上面的標點="",一個也不能少。  
              3.SSI指令是大小寫敏感的,因此參數必須是小寫纔會起作用。
SSI指令
     除了include指令,ssi還有很多很帥的指令,如:echo config exec set 甚至條件表達式if else ,詳細見apache手冊。
#include指令詳解
Include命令可以把其它文檔中的文字或圖片插入到當前被解析的文檔中,這是整個SSI的關鍵所在。通過Include命令只需要改動一個文件就可以瞬間更新整個站點!   
Include命令具有兩個不同的參數:  
      Virtual:給出到服務器端某個文檔的虛擬路徑。例如:<!--#include virtual="/includes/header.html" --> (我的理解就是相對於網站根目錄的路徑)  
      File:給出當前目錄的相對路徑其中不能使用"../",也不能使用絕對路徑。例如: <!--#include file="header.html" -->   這就要求每一個目錄中都包含一個header.html文件。(我的理解就是被包含的文件與該文件同級或者下一級目錄或下下..級目錄下的文件,如同級的test.html,或者同級目錄下的test/test1.html
在使用<!--#include virtual=時,遇到一個問題,就是引入的文件同其不在同一個域名下,但是在同一臺服務器上。通過在當前域名下建立到其他域名的文件的軟鏈接(符號鏈接解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章