閱讀224 返回首頁    go 阿裏雲 go 技術社區[雲棲]


SSI技術詳解

 

什麼是SSI?

SSI直譯服務器端包含(Server Side Includes),由字麵上看由WEB在服務器提供的一種功能,並且是在服務器端進行的。一般說來,要完成較複雜的任務(如:聊天室/留言本等),必須設計專門的CGI或ASP程序;但是如果隻是想給網頁加上簡單的功能(如:顯示一篇文檔,web服務器環境變量,關於該文檔的更新日期/大小等),則隻要SSI就可以完成了。SSI則是直接由服務器解釋執行的,須要WEB服務器軟件支持SSI。
而且,由於直接在服務器端執行SSI,產生相應HTML代碼;所以對客戶端沒有限製,不會產生因為不同瀏覽器而產生不同的觀看效果。

SSI有什麼用?
目前,主要有以下幾種用用途:
1、 顯示服務器端環境變量<#echo>
2、 將文本內容直接插入到文檔中<#include>
3、 顯示WEB文檔相關信息<#flastmod #fsize> (如文件製作日期/大小等)
4、 直接執行服務器上的各種程序<#exec>(如CGI或其他可執行程序)
5、 設置SSI信息顯示格式<#config>(如文件製作日期/大小顯示方式)
高級SSI<XSSI>可設置變量使用if條件語句。

使用SSI很容易吧?
SSI是為WEB服務器提供的一套命令,這些命令隻要直接嵌入到HTML文檔的注釋內容之中即可。如:
<!–#include file=”info.htm”–>
就是一條SSI指令,其作用是將”info.htm”的內容拷貝到當前的頁麵中,當訪問者來瀏覽時,會看到其它HTML文檔一樣顯示info.htm其中的內容。
其它的SSI指令使用形式基本同剛才的舉例差不多,可見SSI使用隻是插入一點代碼而已,使用形式非常簡單。
當然,如果WEB服務器不支持SSI,它就會隻不過將它當作注釋信息,直接跳過其中的內容;瀏覽器也會忽略這些信息。

如何在我的WEB服務器上配置SSI功能?
    在一些WEB服務器上(如IIS 4.0/SAMBAR 4.2),包含 #include 指令的文件必須使用已被映射到 SSI 解釋程序的擴展名;否則,Web 服務器將不會處理該SSI指令;默認情況下,擴展名 .stm、.shtm 和 .shtml 被映射到解釋程序(Ssinc.dll)。
    Apache則是根據你的設置情況而定,修改srm.conf如:
AddType text/x-server-parsed-html .shtml
將隻對.shtml擴展名的文件解析SSI指令
AddType text/x-server-parsed-html .html
將對所有HTML文檔解析SSI指令
    Netscape WEB服務器直接使用Administration Server(管理服務器)可打開SSI功能。
    Website使用Server Admin程序中的Mapping標簽,擴展名添加內容類型為:wwwserver/html-ssi
    Cern服務器不支持SSI,可用SSI詐騙法,到

上下載一個PERL腳本,即可使你的CERN服務器使用一些SSI指令。(不支持exec指令。)

二、SSI指令使用詳解
1.#echo 示範

作用:

將環境變量插入到頁麵中。

語法:

<!–#echo var=”變量名稱”–>

示例:

本文檔名稱:<!–#echo var=”DOCUMENT_NAME”–>

現在時間:<!–#echo var=”DATE_LOCAL”–>
你的IP地址是:<!–#echo var=”REMOTE_ADDR”–>

可在SSI中使用的變量: 1.隻有SSI中能使用的變量。2.標準CGI變量3.某些服務器支持的變量

①下麵是在標準SSI支持的變量:

  變量名稱
 作用
 示例
 
1
 DOCUMENT_NAME
 當前文檔名
 echo.html
 
2
 DOCUMENT_URL

或DOCUMENT_URI
 當前文檔相對URL
 /ssi/echo.html
 
3
 QUERY_STRING_UNESCAPED
或QUERY_STRING
 所發送的查詢字符串
 sample
 
4
 DATE_LOCAL
 服務器中當前日期
 Sun, 23 May 1999 21:54:30
 
5
 DATE_GMT
 以格林威冶時間設置的服務器時間
 Sun, 23 May 1999 13:54:30
 
6
 LAST_MODIFIED
 當前文檔最後修改時間
 23-May-1999 PST
 

 

②標準的CGI變量
WEB上關於CGI環境變量測試的示例:

LINUX下Apache:
Freebsd下Apache:

  CGI環境變量名稱
 作用
 示例
 
1
 AUTH_TYPE
 用戶所使用的身份驗證類型
  
2
 CONTENT_LENGTH
 服務器輸出文本長度
 0
 
3
 HTTP_ACCEPT
 客戶機可接受的MIME類型
 application/vnd.ms-excel, application/msword, */*
 
4
 HTTP_USER_AGENT
 客戶機瀏覽器配置狀況
 Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
 
5
 GATEWARY_INTERFACE
 服務器所使用的 CGI 規範的修正版
 CGI/1.1
 
6
 PATH_INFO
 客戶端給出附加路徑信息
  
7
 PATH_TRANSLATED
 PATH_INFO 的值,但帶有擴展為某個目錄規範的虛擬路徑
 /v/spool/webadm/html
 
8
 QUERY_STRING
 在引用該腳本的 URL 中跟在問號 (?) 後麵的信息
 Sample
 
9
 REMOTE_ADDR
 客戶機IP地址
 202.103.27.103
 
10
 REMOTE_HOST
 客戶機名稱
  
11
 REQUEST_METHOD
 HTTP請求方法
 GET
 
12
 SCRIPT_NAME
 當前腳本名稱
 /cgi-main/cgiwrap/hoyi/hiecho.cgi
 
13
 SERVER_NAME
 服務器名稱或IP地址
 hoyi.zb169.net
 
14
 SERVER_PORT
 服務器接請求的TCP/IP端口
 80
 
15
 SERVER_PROTOCOL
 與請求有關的信息檢索協議的名稱與版本,通常為 HTTP/1.0
 HTTP/1.1
 
16
 SERVER_SOFTWARE
 響應請求的 Web 服務器軟件的名稱和版本
 Apache/1.3.6 (Unix)
 
 2、#include 示範

作用:

將文本文件的內容直接插入到文檔頁麵中。

語法:
<!–#include file=”文件名稱”–>

<!–#include virtual=”文件名稱”–>

file 文件名是一個相對路徑,該路徑相對於使用 #include 指令的文檔所在的目錄。被包含文件可以在同一級目錄或其子目錄中,但不能在上一級目錄中。如表示當前目錄下的的nav_head.htm文檔,則為file=”nav_head.htm”。

virtual 文件名是 Web 站點上的虛擬目錄的完整路徑。如表示相對於服務器文檔根目錄下hoyi目錄下的nav_head.htm文件;則為file=”/hoyi/nav_head.htm”

參數:

file 指定包含文件相對於本文檔的位置

virtual 指定相對於服務器文檔根目錄的位置

注意:

1、文件名稱必須帶有擴展名。

2、被包含的文件可以具有任何文件擴展名,我覺得直接使用htm擴展名最方便,微軟公司推薦使用 .inc 擴展名(這就看你的愛好了)。

示例:

<!–#include file=”nav_head.htm”–>將頭文件插入到當前頁麵

<!–#include file=”nav_foot.htm”–>將尾文件插入到當前頁麵

3. #flastmod 和#fsize 示範

作用:

#flastmod 文件最近更新日期

#fsize 文件的長度

語法:
<!–#flastmod file=”文件名稱”–>

<!–#fsize file=”文件名稱”–>

參數:

file 指定包含文件相對於本文檔的位置 如 info.txt 表示當前目錄下的的info.txt文檔

virtual 指定相對於服務器文檔根目錄的位置 如 /hoyi/info.txt 表示

注意:

文件名稱必須帶有擴展名。

 

 

示例:

<!–#flastmod file=”news.htm”–>

將當前目錄下news.htm文件的最近更新日期插插入到當前頁麵

<!–#fsize file=”news.htm”–>

將當前目錄下news.htm的文件大小入到當前頁麵

4.#exec  示範

作用:

將某一外部程序的輸出插入到頁麵中。可插入CGI程序或者是常規應用程序的輸入,這取決於使用的參數是cmd還是cgi。

語法:

語法:
<!–#exec cmd=”文件名稱”–>

<!–#exec cgi=”文件名稱”–>

參數:

cmd 常規應用程序

cgi CGI腳本程序

示例:

<!–#exec cmd=”cat /etc/passwd”–>將會顯示密碼文件

<!–#exec cmd=”dir /b”–>將會顯示當前目錄下文件列表

 

<!–#exec cgi=”/cgi-bin/gb.cgi”–>將會執行CGI程序gb.cgi。

<!–#exec cgi=”/cgi-bin/access_log.cgi”–>將會執行CGI程序access_log.cgi。

注意:

從上麵的示例可以看出,這個指令相當方便,但是也存在安全問題。

禁止方法:

.Apache,將access.conf中的”Options Includes ExecCGI”這行代碼刪除;

.在IIS中,要禁用 #exec 命令,可修改 SSIExecDisable 元數據庫;

5.#config

作用:

指定返回給客戶端瀏覽器的錯誤信息、日期和文件大小的格式。

語法:

<!–#config errmsg=”自定義錯誤信息”–>

<!–#config sizefmt=”顯示單位”–>

<!–#config timefmt=”顯示格式”–>

參數:

errmsg 自定義SSI執行錯誤信息,可以為任何你喜歡的方式。

sizefmt 文件大小顯示方式,默認為字節方式(“bytes”)可以改為千字節方式(“abbrev”)

timefmt 時間顯示方式,最靈活的配置屬性。

代碼
 示例
 作用
 代碼
 示例
 作用
 
%a
 Mon
 縮寫的星期幾
 %m
 05
 月份數
 
%A
 Monday
 星期幾
 %M
 55
 分
 
%b
%h
 Aug
 縮寫的月份名
 %p
 AM
 上、下午(AM或PM)
 
%r
 10:20:20 AM
 12小製時間
 
%B
 Auguest
 月份名
 %s
 40
 秒
 
%d
 01
 當月第幾天
 %T
 20:20:30
 24小製時間
 
%D
 05/28/99
 數字日期
 %U
%W
 21
 一年中的星期
 
%e
 1
 當月第幾天,前麵不放0
 %w
 2
 從星期天至今天數
 
%H
 20
 小時(24小時製)
 %y
 99
 2位數格式的年號
 
%I
 08
 小時(12小時製)
 %Y
 1999
 4位數表示的年號
 
%j
 320
 一年中的天數
 %z
 PDT
 時區位置
 

 

示例:

顯示一個不存在文件的大小
<!–#config errmsg=”服務器執行錯誤,請聯係管理員謝謝!”–>

<!–#fsize file=”不存在的文件.htm”–>

以千字節方式顯示文件大小

<!–#config sizefmt=”abbrev”–>

<!–#fsizefile=”news.htm”–>

以特定的時間格式顯示時間

<!–#config timefmt=”%Y年/%m月%d日 星期%W 北京時間%H:%M:%s,%Y年已過去了%j天 今天是%Y年的第%U個星期”–>

<!–#echo var=”DATE_LOCAL”–>

顯示今天是星期幾,幾月,時區
<!–#config timefmt=”今天%A, %B ,服務器時區是 %z,是”–>

<!–#echo var=”DATE_LOCAL”–>
 
6.XSSI

XSSI(Extended SSI)是一組高級SSI指令,內置於Apache 1.2或更高版本的mod-include模塊之中。

其中可利用的的指令有:

#printenv

#set

#if

#printenv

作用:

顯示當前存在於WEB服務器環境中的所有環境變量。

語法:<!–#printenv–>

參數:無

示例:

<!–#printenv–>

#set

作用:可給變量賦值,以用於後麵的if語句。

語法:<!–#set var=”變量名”value=”變量值”–>

參數:無

示例:

<!–#set var=”color”value=”紅色”–>

#if

作用:

創建可以改變數據的頁麵,這些數據根據使用if語句時計算的要求予以顯示。

語法:

<!–#if expr=”$變量名=/”變量值A/””–>

顯示內容

<!–#elif expr=”$變量名=/”變量值B/””–>

顯示內容

<!–#else–>

顯示內容

<!–#endif”–>

參數:

關於XSSI的條件表達式

表達式
 作用
 
(string)
 如果string存在,就返回真
 
string1=string2
 如果兩個字符串相等,就返回真
 
string1!=string2
 如果兩個字符串不等,就返回真
 
string1<string2
 如果string1小於string2,就返回真
 
string1<=string2
 如果string1小於等於string2,就返回真
 
string1>string2
 如果string1大於string2,就返回真
 
string1>=string2
 如果string1大於等於string2,就返回真
 
!string
 !為”非”操作符;若string存在,就返回真
 
(string1)&&(string2)
 &&為”與”操作符;string1、string2都存在,就返回真
 
(string1)!!(string2)
 !! 為”或”操作符;string1、string2有一個存在,就返回真
 

示例:

<!–#if expr=”$SERVER_NAME=/”hoyi.zb169.net/””–>

 

<!–#elif expr=”$SERVER_NAME=/”linux.cqi.com.cn/”” –>

 

<!–#else–>

歡迎光臨好易CGI工廠!

<!–#endif”–>

注意:

用於前麵指令中的反斜杠,是用來代換內部的引號,以便它們不會被解釋為結束表達式。不可省略。

最後更新:2017-04-02 00:06:32

  上一篇:go 自定義Unity對象生命周期管理集成ADO.NET Entity Framework
  下一篇:go AJAX開源效果網址