SSI使用詳細(xì)說(shuō)明(二)
發(fā)表時(shí)間:2024-02-07 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]2.Include命令 Include命令可以把其它文檔中的文字或圖片插入到當(dāng)前被解析的文檔中,是整個(gè)SSI的關(guān)鍵所在。通過(guò)Include命令只需要改動(dòng)一個(gè)文件就可以瞬間更新整個(gè)站點(diǎn)! Include命令具有兩個(gè)不同的參數(shù),如果使用錯(cuò)誤的參數(shù)更新站點(diǎn)的話(huà),不僅達(dá)不到初衷,反而會(huì)得到一大堆的錯(cuò)...
2.Include命令 Include命令可以把其它文檔中的文字或圖片插入到當(dāng)前被解析的文檔中,是整個(gè)SSI的關(guān)鍵所在。通過(guò)Include命令只需要改動(dòng)一個(gè)文件就可以瞬間更新整個(gè)站點(diǎn)!
Include命令具有兩個(gè)不同的參數(shù),如果使用錯(cuò)誤的參數(shù)更新站點(diǎn)的話(huà),不僅達(dá)不到初衷,反而會(huì)得到一大堆的錯(cuò)誤信息。
Virtual:給出到服務(wù)器端某個(gè)文檔的虛擬路徑。例如:
$#@60;!--#include virtual="/includes/header.html" --$#@62;
為了更加合理的組織站點(diǎn)的內(nèi)容,用戶(hù)可以在根目錄下創(chuàng)建includes子目錄來(lái)存放所有的包含文件。Virtual參數(shù)可以通知服務(wù)器所要包含的是一個(gè)虛擬文件,即文件和當(dāng)前被解析的文檔不是位于同一個(gè)目錄,而是存放在其它目錄中。服務(wù)器會(huì)根據(jù)該參數(shù)的值找到根目錄下的includes子目錄。使用這種方法,用戶(hù)可以把所有HTML文檔包含的文件放在一個(gè)目錄中,而根據(jù)相互之間的關(guān)系把不同的頁(yè)面保存在不同的目錄或子目錄中。無(wú)論服務(wù)器解析哪一個(gè)文檔都可以找到所包含的文件,不會(huì)產(chǎn)生任何錯(cuò)誤。
不過(guò)這里有一個(gè)小問(wèn)題需要解決。一般我們都會(huì)在頁(yè)面中加入一些TITLE和META標(biāo)簽,如果我們規(guī)定所有的頁(yè)面都調(diào)用相同的頁(yè)眉文件的話(huà),就顯得很不靈活。用戶(hù)碰到這樣的問(wèn)題時(shí),可以使用兩個(gè)包含文件,一個(gè)設(shè)置TITLE標(biāo)簽前的內(nèi)容,另一個(gè)設(shè)置META標(biāo)簽后的部分,而在兩個(gè)包含文件之間則可以添加任何定制內(nèi)容。例如:
$#@60;!--#include virtual="/includes/header1.html" --$#@62;
$#@60;TITLE$#@62;Your Page Title$#@60;/TITLE$#@62;
$#@60;LINK rel = STYLESHEET Type = "text/css" $#@62;
$#@60;META NAME = "Description" CONTENT = " Description of page"$#@62;
$#@60;META NAME = "Keywords" CONTENT = "keywords for page" $#@62;
$#@60;!--#include virtual="/includes/header2.html" --$#@62;
這里放置頁(yè)面內(nèi)容
$#@60;!--#include virtual="/includes/footer.html" --$#@62;
從上我們可以看出通過(guò)在頁(yè)面中包含頁(yè)眉和頁(yè)腳可以大大減少站點(diǎn)更新的工作量。但是如果我們希望動(dòng)態(tài)顯示一些內(nèi)容,例如頁(yè)面的最后更新時(shí)間等該怎么辦呢?沒(méi)問(wèn)題,我們可以把包含文件使用.html后綴保存,這樣就可以在包含文件中調(diào)用其它的包含文件。
File:給? 當(dāng)前目錄的相對(duì)路徑,其中不能使用“../”,也不能使用絕對(duì)路徑。例如:
$#@60;!--#include file="header.html" --$#@62;
這就要求每一個(gè)目錄中都包含一個(gè)header.html文件。當(dāng)然,采用這樣的方法并不比更新每一個(gè)頁(yè)面簡(jiǎn)單多少,但是如果用戶(hù)只更新一、兩個(gè)文件的話(huà)還是很方便的。例如,如果我們不希望讓一個(gè)對(duì)HTML不熟悉的人直接改動(dòng)網(wǎng)站中的新聞頁(yè)面的話(huà),可以只讓他更新一個(gè)單獨(dú)的文本文件,然后再把該文件包含到HMTL文檔中,這樣即不會(huì)破壞原頁(yè)面,同時(shí)又更新了內(nèi)容,兩全其美。
3.Echo:
Echo命令可以顯示以下各環(huán)境變量:
DOCUMENT_NAME:顯示當(dāng)前文檔的名稱(chēng)。
$#@60;!--#echo var="DOCUMENT_NAME" --$#@62;
顯示結(jié)果為:
index.html
DOCUMENT_URI:顯示當(dāng)前文檔的虛擬路徑。例如:
$#@60;!--#echo var="DOCUMENT_URI" --$#@62;
顯示結(jié)果為:
/YourDirectory/YourFilename.html
隨著網(wǎng)站的不斷發(fā)展,那些越來(lái)越長(zhǎng)的URL地址肯定會(huì)讓人頭疼。如果使用SSI,一切就會(huì)迎刃而解。因?yàn)槲覀兛梢园丫W(wǎng)站的域名和SSI命令結(jié)合在一起顯示完整的URL,即:
http://YourDomain$#@60;!--#echo var="DOCUMENT_URI" --$#@62;
QUERY_STRING_UNESCAPED:顯示未經(jīng)轉(zhuǎn)義處理的由客戶(hù)端發(fā)送的查詢(xún)字串,其中所有的特殊字符前面都有轉(zhuǎn)義符“\”。例如:
$#@60;!--#echo var="QUERY_STRING_UNESCAPED" --$#@62;
DATE_LOCAL:顯示服務(wù)器設(shè)定時(shí)區(qū)的日期和時(shí)間。用戶(hù)可以結(jié)合config命令的timefmt參數(shù),定制輸出信息。例如:
$#@60;!--#config timefmt="%A, the %d of %B, in the year %Y" --$#@62;
$#@60;!--#echo var="DATE_LOCAL" --$#@62;
顯示結(jié)果為:
Saturday, the 15 of April, in the year 2000
[page_break]
DATE_GMT:功能與DATE_LOCAL一樣,只不過(guò)返回的是以格林尼治標(biāo)準(zhǔn)時(shí)間為基準(zhǔn)的日期。例如:
$#@60;!--#echo var="DATE_GMT" --$#@62;
LAST_MODIFIED:顯示當(dāng)前文檔的最后更新時(shí)間。同樣,這是SSI中非常實(shí)玫囊桓齬δ,只要在HTML文檔中加入以下這行簡(jiǎn)單的文字,就可以在頁(yè)面上動(dòng)態(tài)的顯示更新時(shí)間。
$#@60;!--#echo var="LAST_MODIFIED" --$#@62;
CGI環(huán)境變量
除了SSI環(huán)境變量之外,echo命令還可以顯示以下CGI環(huán)境變量:
SERVER_SOFTWARE:顯示服務(wù)器軟件的名稱(chēng)和版本。例如:
$#@60;!--#echo var="SERVER_SOFTWARE" --$#@62;
SERVER_NAME: 顯示服務(wù)器的主機(jī)名稱(chēng),DNS別名或IP地址。例如:
$#@60;!--#echo var="SERVER_NAME" --$#@62;
SERVER_PROTOCOL:顯示客戶(hù)端請(qǐng)求所使用的協(xié)議名稱(chēng)和版本,如HTTP/1.0。例如:
$#@60;!--#echo var="SERVER_PROTOCOL" --$#@62;
SERVER_PORT:顯示服務(wù)器的響應(yīng)端口。例如:
$#@60;!--#echo var="SERVER_PORT" --$#@62;
REQUEST_METHOD:顯示客戶(hù)端的文檔請(qǐng)求方法,包括GET, HEAD, 和POST。例如:
$#@60;!--#echo var="REQUEST_METHOD" --$#@62;
REMOTE_HOST:顯示發(fā)出請(qǐng)求信息的客戶(hù)端主機(jī)名稱(chēng)。
$#@60;!--#echo var="REMOTE_HOST" --$#@62;
REMOTE_ADDR:顯示發(fā)出請(qǐng)求信息的客戶(hù)端IP地址。
$#@60;!--#echo var="REMOTE_ADDR" --$#@62;
AUTH_TYPE:顯示用戶(hù)身份的驗(yàn)證方法。
$#@60;!--#echo var="AUTH_TYPE" --$#@62;
REMOTE_USER:顯示訪(fǎng)問(wèn)受保護(hù)頁(yè)面的用戶(hù)所使用的帳號(hào)名稱(chēng)。
$#@60;!--#echo var="REMOTE_USER" --$#@62;
4.Fsize:顯示指定文件的大小,可以結(jié)合config命令的sizefmt參數(shù)定制輸出格式。
$#@60;!--#fsize file="index_working.html" --$#@62;
5.Flastmod:顯示指定文件的最后修改日期,可以結(jié)合config 命令的timefmt參數(shù)控制輸出格式。
$#@60;!--#config timefmt="%A, the %d of %B, in the year %Y" --$#@62;
$#@60;!--#flastmod file="file.html" --$#@62;
這里,我們可以利用flastmod參數(shù)顯示出一個(gè)頁(yè)面上所有鏈接頁(yè)面的更新日期。方法如下:
$#@60;!--#config timefmt=" %B %d, %Y" --$#@62;
$#@60;A HREF="/directory/file.html"$#@62;File$#@60;/A$#@62;
$#@60;!--#flastmod virtual="/directory/file.html" --$#@62;
$#@60;A HREF="/another_directory/another_file.html"$#@62;Another File$#@60;/A$#@62;
$#@60;!--#flastmod virtual="/another_directory/another_file.html" --$#@62;
顯示結(jié)果為:
File April 19, 2000
Another File January 08, 2000
也許有的讀者會(huì)認(rèn)為兩個(gè)鏈接就這么復(fù)雜,一點(diǎn)也不方便。其實(shí),如果頁(yè)面上有20個(gè)或者更多的鏈接,而且每個(gè)鏈接都定期更新的話(huà),就可以看出使用flastmod顯示修改日期的作用。
6.Exec
Exec命令可以執(zhí)行CGI腳本或者shell命令。使用方法如下:
Cmd:使用/bin/sh執(zhí)行指定的字串。如果SSI使用了IncludesNOEXEC選項(xiàng),則該命令將被屏蔽。
Cgi:可以用來(lái)執(zhí)行CGI腳本。例如,下面這個(gè)例子中使用服務(wù)端cgi-bin目錄下的counter.pl腳本程序在每個(gè)頁(yè)面放置一個(gè)計(jì)數(shù)器:
$#@60;!--#exec cgi="/cgi-bin/counter.pl" --$#@62;