一、SSI介绍

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

使用SSI (Server Side Include)技术

想要找到既富有创意的平面设计人员,又有脚本开发经验的人员,实在是太难了。而如果一个百分之百的页面都是php脚本的网站,将为页面维护带来非常大的困难。而且使用了php的自动加头和加尾的方法,使得几乎所有页面都是语义不完整的,不能借助任何一款页面设计工具工作,是另一个弊病。

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

比如:你可以在SHTML文件中用SSI指令引用其他的html文件(#include ),服务器传送给客户端的文件,是已经解释的SHTML不会有SSI指令。它实现了HTML所没有的功能,就是可以实现了动态的SHTML,可以说是HTML的一种进化吧。像新浪的新闻系统就是这样的,新闻内容是固定的但它上面的广告和菜单等就是用#include引用进来的。

 

二、apache2 SSI 配置

Apache的安装和配置:SSI的应用需要安装ApacheServer,并且安装完成后需要修改其配置文件(这里以version2.2为例进行说明,默认安装路径为C:\Program Files\Apache Software Foundation\
1 httpd.conf
文件更新
文件位置:\Apache2.2\conf\httpd.conf
更新内容1
     # First, we configure the "default" to be a very restrictive set of
     # features.  
     #
     <Directory />                 
如果有虚拟主机,则虚拟主机路径下也需修改
         Options FollowSymLinks   
前加#改为注释
         AllowOverride All
         Order deny,allow            
前加#改为注释
         Deny from all                  
前加#改为注释
         Xbithack full                    
改为"Xbithack ON"
         Options Includes              
改为"Options +Includes"
     </Directory>

更新内容2
    # The Options directive is both complicated and important. Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks
    Options FollowSymLinks MultiViews Includes       
追加此行
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride None                                             
改为"AllowOverride All"

更新内容3
     #
     # "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin" should be changed to whatever your ScriptAliased
     # CGI directory exists, if you have that configured.
     #
     <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin">
         AllowOverride None       
改为"AllowOverride All"
         Options None
         Order allow,deny
         Allow from all
     </Directory>

更新内容4
    #
    # Filters allow you to process content before it is sent to the client.
    #
    # To parse .shtml files for server-side includes (SSI):
    # (You will also need to add "Includes" to the "Options" directive.)
    #
    AddType text/html .shtml
    AddType text/x-server-parsed .html       
追加此行

2 .htaccess文件做成
文件位置:\Apache2.2
文件内容:
     Options +Includes
     AddOutputFilter INCLUDES .shtml
     AddHandler server-parsed html
     AddType text/x-server-parsed-html .shtml .html .htm
做成方法:由于windows不能作成只有文件后缀没有文件名的文件,所以可以先将上面的内容作成一个txt文件,如:htaccess.txt。然后进入cmd修改其文件名。重命名语句格式为:rename htaccess.txt .htaccess
说明:由于本应用的要求是在html中插入文本,而不是在shtml中插入,所以.htaccess文件的配置是必不可少的。

3 重起Apache Server

html做成
1
文件位置: \Apache2.2\htdocs

2 text.html
     <head><title>SSI TEST</title></head>
     <body><form>
          <!--#include file="SSI_Insert.html"-->
          <!--#echo var="DATE_LOCAL"-->
     </form></body>

3 SSI_Insert.html
     <div style="background-color:#FFCC33">
          <lable id="area3">AREA3</lable>
          <hr>
     </div>
html的执行:
1 使用IE访问localhost
     http://127.0.0.1/text.html

2 执行效果
     test.html中插入了insert.html定义的背景色为#FFCC33DIV和当前时刻

三、如何试用SSI

(一)SSI指令基本格式:

语法

<!--指令名称="指令参数"-->

示例

<!--#include file="info.htm"-->

说明:

<!– –>HTML语法中表示注释,当WEB服务器不支持SSI时,会忽略这些信息。

#include SSI指令之一。

file include的参数, info.htm为参数值,在本指令中指将要包含的文档名。

注意:

<!–#号间无空格,只有SSI指令与参数间存在空格。

上面的标点=””,一个也不能少。

SSI指令是大小写敏感的,因此参数必须是小写才会起作用。

(二)SSI指令使用详解

1)#echo 示范

作用: 将环境变量插入到页面中。

语法: <!--#echo var=”变量名称”-->

示例:

本文档名称:<!--#echo   var=”DOCUMENT_NAME”-->

现在时间:<!--#echo   var=”DATE_LOCAL”-->

你的IP地址是:<!--#echo   var=”REMOTE_ADDR”-->

可在SSI中使用的变量:

1.     只有SSI中能使用的变量

 

变量名称

作用

示例

1

DOCUMENT_NAME

当前文档名

echo.html

2

DOCUMENT_URLDOCUMENT_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

2.     标准CGI变量:

WEB上关于CGI环境变量测试的示例:

o      LINUXApachehttp://hoyi.zb169.net/cgi-bin/hiecho.cgi?sample

o      FreebsdApache: 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)

3.     某些服务器支持的变量

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”

注意:

文件名称必须带有扩展名。

被包含的文件可以具有任何文件扩展名,我觉得直接使用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

上、下午(AMPM)

%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=”服务器执行错误,请联系管理员 XX@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

XSSIExtended 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)

&&操作符;string1string2都存在,就返回真

(string1)!!(string2)

!! 操作符;string1string2有一个存在,就返回真

示例:

        <!--#if   expr=”$SERVER_NAME=\”hoyi.zb169.net\””-->

        欢迎光临好易CGI工厂在淄博热线的分站http://hoyi.zb169.net/

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

        欢迎光临好易CGI工厂在太阳城的分站http://linux.cqi.com.cn/~hoyi

        <!--#else-->

        欢迎光临好易CGI工厂!

        <!--#endif”-->

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

 

 

posted on 2009-06-19 12:15  林宁  阅读(1042)  评论(0编辑  收藏  举报