一:概述

SSI:服务器端嵌入或者叫服务器端包含,是Server Side Include的简写。SSI技术通过在文档中加入SSI指令,让服务器端在输出文档之前解析SSI指令,并把解析完的结果和文档一同输出给客户端。

SSI的指令格式为:<!-- #directive parameter="value" -->

其中,directive是指令名,parameter指令参数,value指令参数值

可以看到,就是html注释,事实上,Web服务器开启了SSI,并且页面包含可以解析的指令,那么Web服务器就解析这个指令。没开启器SSI或者开启了SSI,但是不是可以解析的指令,那么都当做注释。

注意的是,“#”要和directive连在一起,中间不能含有空格

SSI包含的指令有

config:修改 SSI 的默认设置

echo:显示环境变量

exec:执行 CGI 脚本

flastmod :显示指定文件的最后修改日期

fsize:显示指定文件的大小

include:把其它文档插入到当前被解析的文档中

二:准备工作

新建一个站点,站点路径为C:\inetpub\wwwroot\ssitutorial,网站名称为localhost8585,端口为8585

在站点目录放一个html文件,名为index.html,首先没开启SSI时,测试使用SSI指令是否有效果

html文件内容如下

  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5. <title></title>
  6. </head>
  7.  
  8. <body>
  9. <p>Date = <!--#echo var = "date_local" --></p>
  10. </body>
  11.  
  12. </html>

使用了echo指令,显示当前时间

浏览http://localhost:8585/index.html,查看效果

可以看到”Date=“后面并没显示当前时间,说明没开启SSI,指令只是作为注释

下面,开启SSI

在IIS选中站点localhost8585,选择”处理程序映射“

进入”处理程序映射“后,选择操作中的”添加模块映射“

弹出”添加模块映射“窗口,在窗口指定解析html文件

点确定后,可以看到,在”处理程序映射“多了一项,同时,在站点目录下,也就是C:\inetpub\wwwroot\ssitutorial生成了一个web.config文件

”处理程序映射“

web.config文件

web.config的内容如下

设置后之后,测试下SSI是否成功,刷新http://localhost:8585/index.html,查看效果

可以看到,”Date=”后面显示日期,说明SSI指令生效了

三:SSI各个指令的用法

3.1 config:修改 SSI 的默认设置,参数:

errmsg:自定义的SSI执行错误信息;

timefmt:定义日期和时间的格式;

sizefmt:决定文件大小是以字节、千字节为单位表示

errmsg参数:自定义的SSI执行错误信息,必须放在其它指令前,才能显示自定义的错误信息

例如:

  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5. <title></title>
  6. </head>
  7.  
  8. <body>
  9.  
  10. <!-- #config errmsg="这是自定义错误信息"-->
  11. <p>File Size = <!--#fsize file="filename.txt"--> bytes</p>
  12.  
  13. </body>
  14.  
  15. </html>

这里的filename.txt并不存在,所以执行会出错,那么就显示自定义错误信息了,如下图

timefmt参数:定义日期和时间的格式

  1. <!-- #config timefmt="%y年%m月%d日"-->
  2. <p>Date = <!--#echo var = "date_local" --></p>

sizefmt:决定文件大小是以字节(bytes)、千字节(abbrev)为单位表示

比如,有一个文件a.exe,大小为48,594,944字节,使用不同单位

  1. <!--#config sizefmt="bytes"-->
  2. <p><!--#fsize file="a.exe"--> bytes</p>
  3.  
  4. <!--#config sizefmt="abbrev"-->
  5. <p><!--#fsize file="a.exe"--> kb</p>

显示如下

算一下,结果是正确的

3.2 echo:显示环境变量

  1. <p>请求方式= <!-- #echo var = "HTTP_METHOD" --></p>

这里显示请求方式

完整的环境变量,可以在点这里查询

3.3 exec:执行 CGI 脚本

首先需要得到CGI程序,用控制台做一个CGI程序,名为CgiDemo

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7.  
  8. namespace CgiDemo
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. Console.Write("Content-Type: text/html\n\n");
  15. Console.Write("<p>Path:" +System.Environment.GetEnvironmentVariable("PATH_TRANSLATED") +"</p>");
  16. } // End of Main().
  17. }
  18. }

输出CGI程序的服务器路径

然后,使用exec执行CGI

  1. <pre><!--#exec cgi = "/cgi-bin/cgidemo.exe" --></pre>

接着访问上面html的地址http://localhost:8585/index.html,出现下面这种情况

说明服务器还要做一些配置。首先,在站点localhost8585—>处理程序映射—>添加模块映射

配置CGI模块

再然后,在 服务器 (不是站点)下找到”ISAPI和CGI限制”

添加刚才那个CGI

再次访问http://localhost:8585/index.html,得到如下结果

说明成功执行CGI程序

3.4 flastmod :显示指定文件的最后修改日期

  1. <!-- #config timefmt="%y年%m月%d日"-->
  2. <pre> <!-- #flastmod file = "a.exe" --></pre>

得到如下结果

a.exe的信息如下

说明是正确的

3.5 fsize:显示指定文件的大小

  1. <!--#config sizefmt="bytes"-->
  2. <p><!--#fsize file="a.exe"--> bytes</p>

得到如下结果

a.exe大小信息如下

说明也是正确的

3.6 include:把其它文档插入到当前被解析的文档中

在index.html所在目录建一个inc.htm文件,文件内容如下

  1. <h2>这是include文件内容</h2>

在index.html包含inc.html

  1. <body>
  2.  
  3. <!--#include file="inc.htm"-->
  4.  
  5. </body>

访问http://localhost:8585/index.html,得到如下结果

可见,inc.htm里的内容被包含进来

另外,如果被包含文件中含有SSI指令,也会解析SSI指令

SSI指令教程的更多相关文章

  1. SSI指令

    1.SSI定义 SSI是英文Server Side Includes的缩写, 即“服务器端包含”或“服务器端嵌入”技术. SSI在HTML文件中,可以通过注释行调用的命令或指针,是一种基于服务器端的网 ...

  2. ARM指令教程

    ARM指令教程 ARM汇编程序特点: l         所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理 ...

  3. SSI指令使用详解(转)

    什么是 SHTML使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为“服务器端嵌入”或者叫“服务器端包含”,是一种类似 ...

  4. SSI注入--嵌入HTML页面中的指令,类似jsp、asp对现有HTML页面增加动态生成内容,见后面例子

    SSI注入漏洞总结 from:https://www.mi1k7ea.com/2019/09/28/SSI%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E%E6%80%BB%E ...

  5. Nginx配置SSI

    一.什么是SSISSI:Server Side Include,是一种基于服务端的网页制作技术,大多数(尤其是基于Unix平台)的web服务器如Netscape Enterprise Server等均 ...

  6. tomcat 支持ssi功能配置

    1.SSI是Server Side Includes 的缩写,是嵌入到HTML页面的一组指令的集合.在返回请求的页面(包含SSI指令前),服务器会处理这些指令,并用处理的结果替换指令,然后把页面返回. ...

  7. Apache Tomcat关于shtml和SSI技术

    Tomcat http://blog.csdn.net/leftfist/article/details/8520773 http://webdevelop.jzxue.com/shtml/ http ...

  8. SSI

    一.简介 SSI(Server Side Includes)技术,是为WEB服务器提供的一套命令,在HTML文档中通过注释行调用的命令或指针,就可以将文本.图形或应用程序信息包含到网页中. SSI具备 ...

  9. nginx ssi 配置小细节(一)

    最近工作需要使用nginx的ssi (server side include)技术,在这里,将使用中的一点心得分享一下,也是一种备忘! 首先,nginx的ssi启用很简单,就只有三个最基本的指令: s ...

随机推荐

  1. winform datagridview如何获取索引 分类: DataGridView 2014-04-11 13:42 216人阅读 评论(0) 收藏

    datagridview.CurrentCell.RowIndex;            是当前活动的单元格的行的索引 datagridview.SelectedRows  ;           ...

  2. IOS开发中ARC下的assign和weak区别

    在ARC中的assign和weak可以说非常相像,导致有很多人误以为他们是一摸一样的,在任何时候都可以划等价,但事实却不是这样. 在群里,有人问,id类型的delegate属性到底是用assign还是 ...

  3. 通过WriteProcessMemory改写进程的内存

    http://www.cnblogs.com/feiyucq/archive/2009/10/21/1587628.html 以PROCESS_ALL_ACCESS权限打开进程以后既能够使用ReadP ...

  4. mapreduce实战:统计美国各个气象站30年来的平均气温项目分析

    气象数据集 我们要写一个气象数据挖掘的程序.气象数据是通过分布在美国各地区的很多气象传感器每隔一小时进行收集,这些数据是半结构化数据且是按照记录方式存储的,因此非常适合使用 MapReduce 程序来 ...

  5. IE6与W3C标准的盒模型差异

    盒子模型(Box Model)是 CSS 的核心,现代 Web 布局设计简单说就是一堆盒子的排列与嵌套,掌握了盒子模型与它们的摆放控制,会发现再复杂的页面也不过如此,然而,任何美好的事物都有缺憾,盒子 ...

  6. Microsoft Windows Server 2008 R2 IIS7.5安装指南

    一.IIS安装步骤: 1.安装Windows Server 2008 R2(见 附录一) 2.配置计算机名称和IP地址(见 附录一) 3.配置成员服务器(见 附录一) 4.点击任务栏上的“服务器管理器 ...

  7. C# 内存管理优化实践

    内存优化畅想系列文章已经结束了,很多读者读完之后可能觉得“然并卵”,毕竟都是给微软提的建议而已,现在都没有实现.那么为了优化内存,有没有什么我们现在就能用的技巧呢?我的答案是:有.网上关于.net内存 ...

  8. iBatis 的修改一个实体

    Student.xml <update id="updateStudent" parameterClass="Student" > UPDATE S ...

  9. angularjs ngTable -Custom filter template-calendar

    jsp页面: <script type="text/ng-template" id="path/to/your/filters/top-Date-One.html& ...

  10. PHP上传原理及应用

    概要 1.FORM表现enctype属性 2.$_FILES系统函数 3.move_uploaded_file函数 4.is_uploaded_file函数 1.FORM标签的enctype属性 只有 ...