SSI技术详解

 

什么是SSI?

SSI直译服务器端包含(Server Side Includes),由字面上看由WEB在服务器提供的一种功能,并且是在服务器端进行的。一般说来,要完成较复杂的任务(如:聊天室/留言本等),必须设计专门的CGI或ASP程序;但是如果只是想给网页加上简单的功能(如:显示一篇文档,web服务器环境变量,关于该文档的更新日期/大小等),则只要SSI就可以完成了。SSI则是直接由服务器解释执行的,须要WEB服务器软件支持SSI。
而且,由于直接在服务器端执行SSI,产生相应HTML代码;所以对客户端没有限制,不会产生因为不同浏览器而产生不同的观看效果。

利用SSI技术,可以有效的将HTML网页和CGI脚本逻辑上分开,也可以将重复的HTML元素抽象和独立出来,减轻维护负担。

SSI (Server Side Includes) are directives that are placed in HTML pages, and evaluated on the server while the pages are being served. They let you add dynamically generated content to an existing HTML page, without having to serve the entire page via a CGI program, or other dynamic technology.

 

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诈骗法,到
http://sw.cse.bris.ac.uk/WebTools/fakessi.html
上下载一个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:http://hoyi.zb169.net/cgi-bin/hiecho.cgi?sample
Freebsd下Apache: http://hoyi.onlineexpress.net/cgi-bin/hiecho.cgi?sample

  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 时间显示方式,最灵活的配置属性,使用strftime()的显示格式。

示例:

显示一个不存在文件的大小
<!--#config errmsg=”服务器执行错误,请联系管理员 X@126.com!”-->

<!--#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=\”abc.net\””-->

欢迎光临好易CGI工厂分站http://abc.net

<!--#elif expr=”$SERVER_NAME=\”linux.cqi.com.cn\”” -->

欢迎光临好易CGI工厂分站http://linux.cqi.com.cn

<!--#else-->

欢迎光临好易CGI工厂!

<!--#endif”-->

注意:

用于前面指令中的反斜杠,是用来代换内部的引号,以便它们不会被解释为结束表达式。不可省略。

 

 

 

附:

配置Apache,支持SSI

# This tells Apache that you want to permit files to
# be parsed for SSI directives.

Options +Includes

# At linux or unix can use
#  Options +Includes -IncludesNOEXEC
# win32 not use it

# You have to tell Apache which files should be parsed.

AddType text/html .shtml

AddHandler server-parsed .shtml

SSI语法

  • Basic SSI directives Syntax

<!--#element attribute=value attribute=value ... -->

  • Today's date

<!--#config timefmt="%Y/%m/%d %a %H:%M:%S" -->

Today is <!--#echo var="DATE_LOCAL" -->

  • Modification date of the file

This document last modified <!--#flastmod file="index.html" -->

  • Including the results of a CGI program

<!--#include virtual="/cgi-bin/counter.pl" -->

<!--#include virtual="/cgi-bin/example.cgi?argument=value" -->

  • You can use "#exec cgi=" directive, but it can be disabled using the IncludesNOEXEC Option.
  • Including a standard footer

<!--#include virtual="/footer.html" -->

  • Executing commands

<!--#exec cmd="ls" -->

  • This feature is dangerous. You can allow SSI, but not the exec feature, with the IncludesNOEXEC argument to the Options directive.
  • Setting variables

<!--#set var="modified" value="$LAST_MODIFIED" -->

<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->

  • Conditional expressions

<!--#if expr="test_condition" -->

<!--#elif expr="test_condition" -->

<!--#else -->

<!--#endif -->

 

 

一个关于apache中ssi技术的教程可以查阅:

Apache指南:服务器端包含入门
http://www.kreny.com/doc/apache2.0/howto/ssi.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值