shtml使用SSI(Server Side Include)的html
文件扩展名,SSI(Server Side Include),通常称为"服务器端嵌入"或者叫"服务器端包含",是一种类似于ASP的基于服务器的网页制作技术。
& J5 L7 |$ |5 e, y U0 ~/ R8 U
$ q+ X- X+ r5 h' q0 s! m0 E 1、Config命令
% |" h" `. m w- S, |2 l- S
0 o O, C1 u5 {* w) D
Config命令主要用于修改SSI的默认设置。其中:
/ Q; u$ f: \2 [) M2 R
9 u. C w6 g& ~5 k7 B: X3 p
Errmsg:设置默认错误信息。为了能够正常的返回用户设定的错误信息,在HTML文件中Errmsg参数必须被放置在其它SSI命令的前面,否则客户端只能显示默认的错误信息,而不是由用户设定的自定义信息。
R6 o' p* I: h, e8 t
* \$ p- [6 t" Z* M* P7 {1 v* W <!--#config errmsg="Error! Please email
webmaster@web.com -->
9 R4 N2 r$ d8 F! E9 i6 }
+ i* d/ p( h4 Q8 F7 ?6 l9 }9 b Timefmt:定义日期和时间的使用格式。Timefmt参数必须在echo命令之前使用。
复制内容到剪贴板
代码:
<!--#config timefmt="%A, %B %d, %Y"-->
<!--#echo var="LAST_MODIFIED" -->显示结果为:
8 u/ H% F f* ^+ k/ w A; e) \' G4 s' F- D4 `; n3 c' h
Wednesday, April 12, 2007
l) o, ? s5 w+ y c) M9 |
- ^+ B% ~+ Y9 T) J$ L
也许用户对上例中所使用的%A %B %d感到很陌生,下面我们就以表格的形式总结一下SSI中较为常用的一些日期和时间格式。
7 j: ~3 h0 v y5 A' X" H# F3 g7 Q& g0 g5 X& s$ J
Sizefmt:决定文件大小是以字节、千字节还是兆字节为单位表示。如果以字节为单位,参数值为"bytes";对于千字节和兆字节可以使用缩写形式。同样,sizefmt参数必须放在fsize命令的前面才能使用。
复制内容到剪贴板
代码:
<!--#config sizefmt="bytes" -->
<!--#fsize file="index.html" --> 2、Include命令
2 ~2 M9 } `3 P4 e+ x' [
4 H( ~# p1 Q; T( G! b( |" B$ z Include命令可以把其它文档中的文字或图片插入到当前被解析的
文档中,这是整个SSI的关键所在。通过Include命令只需要改动一个文件就可以瞬间更新整个站点!
, {) S" K1 n" g0 h2 i
/ J& t9 ` [7 y Include命令具有两个不同的参数:
* s5 ~ v5 q0 k# P; @5 P8 c
`# x) @: |2 }& \ Virtual:给出到服务器端某个文档的虚拟路径。例如:
7 O; {3 U: H" W# q" F+ P
* X! P5 }0 L( h; y; `/ y
<!--#include virtual="/includes/header.html" -->
8 o: E5 C4 {; |9 D
3 F9 j8 F, O/ e0 t
File:给出到当前目录的相对路径,其中不能使用"../",也不能使用绝对路径。例如:
* j# z' o o& _) \% R
3 P6 p) n% F; e7 P <!--#include file="header.html" -->
9 x+ ?8 i, p7 I. f
) L9 T1 u: z2 {, o2 J* C: |9 R% Z, X
这就要求每一个目录中都包含一个header.html文件。
+ R: s+ d( D7 k5 O' F6 L# R2 ?
# i Q9 ^" ]) R+ Q- ?
3、Echo命令
5 }# t" [) x- T8 u2 [8 R! N& ]3 B& U
Echo命令可以显示以下各环境变量:
' N! s" K% K! Z9 U' i0 s! e
. q0 h+ D( U. E1 D& c1 p% D, o4 P3 g
DOCUMENT_NAME:显示当前文档的名称。
4 _( o: \ p5 g, L; r5 C
6 ~! l. L1 @, b% c <!--#echo var="DOCUMENT_NAME" -->
8 S5 q! ~" b" h0 \7 o0 E* i5 d) k
9 N- B2 I: S+ s4 D/ ?. d 显示结果为:
( V" Z; ?4 V! B: y9 v
4 s" g" R- V7 L& J( K
index.html
4 H5 O* ]% l0 U3 J; ?7 V/ z6 H) g3 C. X) ~ v! G4 J- u
DOCUMENT_URI:显示当前文档的虚拟路径。例如:
" `# }; R3 U9 n1 |* w1 Z
9 r* e, i6 g, c <!--#echo var="DOCUMENT_URI" -->
8 s: s3 Q0 t% `- w/ ~0 S0 z! q" {9 } J& w& ~
显示结果为:
& f' O; M, j: X0 V
, a- |" I2 z4 H4 ? /YourDirectory/YourFilename.html
( d" j3 {$ R9 i/ D/ B
8 K' F1 E M, ~ I9 F 随着网站的不断发展,那些越来越长的URL地址肯定会让人头疼。如果使用SSI,一切就会迎刃而解。因为我们可以把网站的
域名和SSI命令结合在一起显示完整的URL,即:
( c2 G; G7 Q! V& f- ~- s! W
; D1 I3 [( G- U: D! l* h
http://YourDomain<!--#echo var="DOCUMENT_URI" -->
: f% H$ Z( }/ I' H- T- P
6 i7 @* j4 Q' A2 @% v, I6 r1 q
QUERY_STRING_UNESCAPED:显示未经转义处理的由客户端发送的查询字串,其中所有的特殊字符前面都有转义符"\"。例如:
2 N9 F/ e' Y6 l" e
7 `) U& z1 W! s2 Z+ P3 F <!--#echo var="QUERY_STRING_UNESCAPED" -->
* q1 I6 ~* f, V1 U1 l
1 D- O" {; j8 ~ DATE_LOCAL:显示服务器设定时区的日期和时间。用户可以结合config命令的timefmt参数,定制输出信息。例如:
5 Y/ Z0 j1 v% K$ U2 P
: G5 X' s6 ?' L& A6 W <!--#config timefmt="%A, the %d of %B, in the year %Y" -->
' A* g5 S% }" d9 G3 {1 E7 ]1 K <!--#echo var="DATE_LOCAL" -->
# K; Z* ?$ ?1 _; ?/ b" O r
" @6 Y4 ?" f% O$ Y 显示结果为:
& [, a: l" Y2 L1 b
. C' k- D# g7 k, D, [3 C
Saturday, the 15 of April, in the year 2007
) l, [+ H, a' J/ z# |/ O) J5 f% y
8 Z0 k4 U( t, d& R2 z5 u. I2 ? DATE_GMT:功能与DATE_LOCAL一样,只不过返回的是以格林尼治标准时间为基准的日期。例如:
+ k; Q0 H. m+ V3 `2 b5 D
- s# x' M- |4 r <!--#echo var="DATE_GMT" -->
4 T# J6 |/ I( q$ H6 f, t( a
$ \% f! c" O/ e7 m
LAST_MODIFIED:显示当前文档的最后更新时间。同样,这是SSI中非常实用的一个功能,只要在HTML文档中加入以下这行简单的文字,就可以在页面上动态的显示更新时间。
( Y9 v; @( F- ]5 x9 c0 ^' \# P# V! e, g9 I# I
<!--#echo var="LAST_MODIFIED" -->
; N' R4 m6 c# z) m5 A) m
0 j' e& E9 n4 q$ v' n5 ^ CGI环境变量
/ u6 b& J `0 ?$ c- x
( j! K7 A5 g& Z0 n/ K; F 除了SSI环境变量之外,echo命令还可以显示以下CGI环境变量:
, {3 z: t" }, e9 m1 L
: ]8 H9 j% m& b9 a/ V
SERVER_SOFTWARE:显示服务器
软件的名称和版本。例如:
, s, ^ B( I8 W$ j' q <!--#echo var="SERVER_SOFTWARE" -->
- M7 Z! L- t5 D# |) u) c$ A' J6 s SERVER_NAME: 显示服务器的主机名称,DNS别名或IP地址。例如:
$ v# P! _. \- [* U) o: G
<!--#echo var="SERVER_NAME" -->
/ y; E# c6 y, c) f e
SERVER_PROTOCOL:显示客户端请求所使用的协议名称和版本,如HTTP/1.0。例如:
a: {( ^3 z/ U+ L: x7 S
<!--#echo var="SERVER_PROTOCOL" -->
9 j7 m+ I* D7 z7 i1 c SERVER_PORT:显示服务器的响应端口。例如:
# Y& ?! G4 C& ?+ a5 |2 o8 n <!--#echo var="SERVER_PORT" -->
9 [2 C* g. y7 l- u$ i REQUEST_METHOD:显示客户端的文档请求方法,包括GET, HEAD, 和POST。例如:
! \- d) K" t8 t8 L7 \
<!--#echo var="REQUEST_METHOD" -->
- h3 H* Y% S. I6 V+ ^
REMOTE_HOST:显示发出请求信息的客户端主机名称。
5 D4 V. K8 G/ r$ i4 g/ m1 @. O# ^. E
<!--#echo var="REMOTE_HOST" -->
) F- u2 z7 o9 H2 U! G REMOTE_ADDR:显示发出请求信息的客户端IP地址。
1 G# J; v5 A, f/ X/ t
<!--#echo var="REMOTE_ADDR" -->
! d1 U b, v# c) v N
AUTH_TYPE:显示用户身份的验证方法。
1 G/ C* H% G* r8 y9 S5 ^1 G5 c" R1 V
<!--#echo var="AUTH_TYPE" -->
& T8 x8 n; x5 m. K REMOTE_USER:显示访问受保护页面的用户所使用的帐号名称。
3 W: k! [0 H; A0 M7 U0 H9 V
<!--#echo var="REMOTE_USER" -->
6 g9 e$ s" p9 h6 K
8 L$ g: X2 v5 @) t- M) _ 4、Fsize:显示指定文件的大小,可以结合config命令的sizefmt参数定制输出格式。
5 Q; M& r4 s( l# S& E8 U
& }5 \5 U5 k. ?% }0 z1 z <!--#fsize file="index_working.html" -->
9 ^- Z: A ?. u' ]
2 m6 q( p3 A5 L d 5、Flastmod:显示指定文件的最后修改日期,可以结合config 命令的timefmt参数控制输出格式。
: ` f* q3 N: t6 x) b+ K2 E
* k. o2 c0 o7 X- [! y <!--#config timefmt="%A, the %d of %B, in the year %Y" -->
0 D* A6 f5 W$ V' I8 F <!--#flastmod file="file.html" -->
- ?5 W+ v: K2 W" N
" r7 g7 F4 B5 c, R& ~ B& s W 这里,我们可以利用flastmod参数显示出一个页面上所有链接页面的更新日期。方法如下:
+ y! y$ Y0 P0 T" L
/ e/ Y2 j1 T7 n, G <!--#config timefmt=" %B %d, %Y" -->
+ ?6 I- Y$ w# Q$ h& h <A HREF="/directory/file.html">File</A>
0 Q" q, o: m' M3 F6 y2 Q8 M4 x <!--#flastmod virtual="/directory/file.html" -->
1 i0 }- h1 U) b- v- m2 T+ L# y+ f <A HREF="/another_directory/another_file.html">Another File</A>
) ]. A' Y: [& @- e8 y* K# p* ] <!--#flastmod virtual="/another_directory/another_file.html" -->
8 o$ u, V. X' W; V
5 @& E' e+ D0 {* q0 l 显示结果为:
, E- S) h) y7 `4 D1 u; ]
- H$ W1 P7 b1 ^$ M File April 19, 2007
% ?+ o3 h2 \ i6 l Another File January 08, 2007
. m" j1 Y0 |; y# y2 l% I4 C/ F" E; e( a+ ^/ A4 V" Q) n
6、Exec
8 |9 K& u! G( J8 T, ?7 h% w5 {5 e$ {) P) O% i: H1 C$ x
Exec命令可以执行CGI脚本或者shell命令。使用方法如下:
5 f$ S- u' h; n/ M
, j0 E1 t5 }. Q4 T+ J% E Cmd:使用/bin/sh执行指定的字串。如果SSI使用了IncludesNOEXEC选项,则该命令将被屏蔽。
; u0 s1 T4 o W# _3 u# r
/ Z# @2 h+ U( t2 a" j
Cgi:可以用来执行CGI脚本。例如,下面这个例子中使用服务端cgi-bin目录下的counter.pl脚本程序在每个页面放置一个计数器:
7 N7 h0 ]: q5 R. _" p8 U7 w% C5 a2 _3 I2 d
<!--#exec cgi="/cgi-bin/counter.pl" -->