SSI 服务器端内嵌

SSI 是一种基于服务端的网页制作技术,英文全拼是 Server Side Include,直译为“服务器端包含”,通常称为“服务器端嵌入”或“服务器端内嵌”技术,拥有图灵完备性。

SSI 最常见的用法是将一个或多个文件的内容包含在网页服务器(Web Server)的页面上。例如,一张包含每日报价的页面可以通过下面一段代码将报价单包含在页面中:

<!--#include virtual="../quote.txt" -->

如果修改 quote.txt 文件,那么所有包含此文件的页面都会展示最新的每日报价。这个包含不止局限于文件,而且还有来自程序的文本输出,或者是如当前时间的系统变量。

语法格式

SSI 的语法相当简单,格式如下:

<!--#directive parameter=value parameter=value -->

这些指令都放在 HTML 注释区,所以若 SSI 功能并未启用时,除非其预览页面源代码,否则用户将不会在页面上看到这些 SSI 指令。请注意这种语言的语法中不允许在开头的 < 和指令之间存在空格。

工作原理

在页面内容发送到客户端之前,使用 SSI 指令将文本、图片或代码信息包含到网页中。对于在多个文件中重复出现内容,使用 SSI 是一种简便的方法,将内容存入一个包含文件中即可,不必将其输入所有文件。通过一个非常简单的语句即可调用包含文件,此语句指示 Web 服务器将内容插入适当网页。而且,使用包含文件时,对内容的所有更改只需在一个地方就能完成。

应用场景

服务器端内嵌常用于在整个站点中包含一段公共代码,例如页眉、页脚与导航栏。使用控制代码可以有条件地将导航栏包含在内。例如,在 CMS 管理系统中,当页面内容过多时,可以将页面拆分成一个一个的小页面进行管理,当要更改部分页面时只需要更改具体的小页面即可。

index.html 首页

子页面:
include/header.html :头部区域
include/index_banner.html: 轮播图
include/index_catagory.html: 左侧列表导航
include/footer.html : 页尾

为了让网页服务器辨识启用了服务器端内嵌的 HTML 文件,从而运行这段代码。则文件名应有特殊的扩展名,默认为 .shtml.stm.shtm;或者服务器设置文件的执行标记以配置为允许服务器端内嵌。

作为一种简单的编程语言,服务器端内嵌仅支持一种数据类型:纯文本。它的控制流程相当简单,支持选择,但循环不被原生支持,且只可以通过包含递归式或 URL 重定向的方式进行。这种简单设计的语言使得其比大多数服务器端脚本语言都更易于上手学习使用,而复杂的服务器端处理过程通常使用功能更丰富的编程语言之一来完成。

主流的网页服务器均支持 SSI 服务器端内嵌。

Nginx 配置

下面是 Nginx 支持 SSI 的配置说明:

server {
    listen 80;
    server_name localhost;
    # 开启ssi支持,默认为false
    ssi on;
    # 设置为on表示在处理ssi文件时不输出错误信息,默认为false
    ssi_silent_errors on;
    # 默认支持 html ,如果需要支持 shtml(服务器执行脚本),需要设置 ssi_types 为 text/shtml
    ssi_types text/html;
}