Server Side Include( SSI )学习

来源:互联网 发布:toastr.js 编辑:程序博客网 时间:2024/05/01 17:54

 “服务器端嵌入”或者叫“服务器端包含”: 将内容发送到浏览器之前,可以使用“服务器端包含 (SSI)”指令将文本、图形或应用程序信息包含到网页中。

  Web 服务器在处理网页的同时处理 SSI 指令。当 Web 服务器遇到 SSI 指令时,直接将包含文件的内容插入 HTML 网页。如果“包含文件”中包含 SSI 指令,则同时插入此文件。除了用于包含文件的基本指令之外,还可以使用 SSI 指令插入文件的相关信息(如文件的大小)或者运行应用程序或 shell 命令。

因为包含SSI 指令的文件要求特殊处理,所以必须为所有SSI文件赋予 SSI文件扩展名。默认扩展名是 .stm.shtm .shtml

目前,主要有以下几种用用途:

  1. 显示服务器端环境变量<#echo>
  2. 将文本内容直接插入到文档中<#include>
  3. 显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等)
  4. 直接执行服务器上的各种程序<#exec>(CGI或其他可执行程序)
  5. 设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式)。

使用SSI

SSI是为WEB服务器提供的一套命令,这些命令只要直接嵌入到HTML文档的注释内容之中即可。如:

<!--#includefile="info.htm"-->

    就是一条SSI指令,其作用是将"info.htm"的内容拷贝到当前的页面中,当访问者来浏览时,会看到其它HTML文档一样显示info.htm其中的内容

使用SSI

在Apache server中配置SSI,可在httpd.conf中加入SSI支持。如选择CGI目录,则在cgi配置中加入以下: 

<Directory"/opt/GUI/cgi-bin">

    AddType text/html .ssi

    Options Includes

    AddOutputFilterByType INCLUDES;DEFLATEtext/html

</Directory>

然后,在该目录下的html文件中,即可添加SSI指令。

SSI指令基本格式

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

示例:

<!--#includefile="info.htm"-->

说明:

    1. <!-- -->HTML语法中表示注释,当WEB服务器不支持SSI时,会忽略这些信息。
    2. #include SSI指令之一。
    3. file include的参数, info.htm为参数值,在本指令中指将要包含的文档名。

注意:

    1. <!--#号间无空格,只有SSI指令与参数间存在空格。
    2. 上面的标点="",一个也不能少。
    3. SSI指令是大小写敏感的,因此参数必须是小写才会起作用。

#echo示范

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

语法:

<!--#echo var="变量名称"-->

如:

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

<!--#echo var="REMOTE_ADDR"-->你的IP地址

#include示范
作用:将文本文件的内容直接插入到文档页面中。
语法:

<!--#include file="文件名称"-->  

file 指定的是相对路径,相对于使用#include指定的文档所在目录,被包含文档可在同级目录或子目录汇总,不能在父目录中。

<!--#include virtual="文件名称"-->

virtual 指定Web站点上的虚拟目录的完整路径。

#flastmod #fsize示范

#flastmod: 文件最近更新日期

#fsize:  文件的长度

语法:

<!--#flastmod file="文件名称"-->

<!--#fsize file="文件名称"-->

#exec示范

作用:将某一外部程序的输出插入到页面中。可插入CGI程序或者是常规应用程序的输入,这取决于使用的参数是cmd还是cgi

语法:

<!--#exec cmd="文件名称"-->

<!--#exec cgi="文件名称"-->

参数:

cmd 常规应用程序

cgi CGI脚本程序

示例:

<!--#exec cmd="cat /etc/passwd"--> 将会显示密码文件

<!--#exec cmd="ls -a"--> 将会显示当前目录下文件列表

<!--#exec cgi="/cgi-bin/gb.cgi"--> 将会执行CGI程序gb.cgi

注意:从上面的示例可以看出,这个指令相当方便,但是也存在安全问题。

禁止方法:

  1. Apache,将access.conf中的"Options Includes ExecCGI"这行代码删除;
  2. IIS中,要禁用 #exec命令,可修改 SSIExecDisable元数据库;

#config

作用:

指定返回给客户端浏览器的错误信息、日期和文件大小的格式。

语法:

<!--#config errmsg="自定义错误信息"-->

<!--#config sizefmt="显示单位"-->

<!--#config timefmt="显示格式"-->

参数:

errmsg

 自定义SSI执行错误信息,可以为任何你喜欢的方式。

sizefmt

 文件大小显示方式,默认为字节方式("bytes")可以改为千字节方式("abbrev")

timefmt

 时间显示方式,最灵活的配置属性。

XSSI

XSSI: Extended SSI)是一组高级SSI指令,内置于Apache 1.2或更高版本的mod-include模块之中。其中可利用的的指令有

#printenv

作用:

显示当前存在于WEB服务器环境中的所有环境变量。

语法:

<!--#printenv-->

#set

作用:可给变量赋值,以用于后面的

if语句。

语法:

<!--#set var="变量名" value="变量值"-->

示例:

<!--#set var="color" value="红色"-->

#if

作用:创建可以改变数据的页面,这些数据根据使用

if语句时计算的要求予以显示。

语法:

<!--#if expr="$变量名=/"变量值A/""-->

显示内容

<!--#elif expr="$变量名=/"变量值B/""-->

显示内容

<!--#else-->

显示内容

<!--#endif"-->


欢迎指正补充,谢谢!