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環境變量測試的示例:
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