用生命谱写代码的赞歌

0%

SSI 技术

什么是 SSI ?

SSI (Server Side Includes) 是HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。

SSI技术的好处在于可以用静态页面来实现动态页面的效果,首先对于SEO肯定是有好处的,另一方面,它可以用服务器来处理程序,速度方面应该比程序语言要快。

对于什么时候使用SSI,而什么时候用某些程序生成整个页面的权衡,取决于页面中有多少内容是静态,有多少内容需要在每次页面被提供时重新计算。SSI是一种增加小段信息的好方法,诸如当前时间。如果你的页面大部分是在被提供时生成的,那就要另找方案了。

通常用于多个页面引用公共的内容模块,将此模块分离出来,使用SSI引入即可。

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

上述以上代码便能在服务端完成header.html的动态引入,非常简单。

配置服务器以允许 SSI

使用SSI之前需要服务端进行简单的配置,开启SSI功能。SSI是针对HTML增加动态内容的技术,所以只对HTML类型文件(.html,.shtml),使用SSI功能的文件建议使用.shtml后缀,便于维护。如果使用.shtml后缀需在服务端作一些配置:

1
2
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

第一行命名配置将.shtml作为html文件返回

第二行命令用于在返回请求内容前执行页面中的SSI命令,如果你在.html文件中使用SSI,那么将.shtml改为.html即可。

nginx 配置 SSI

需要的选项主要是以下三个:

ssi: 默认值off,启用ssi时将其设为on
ssi_silent_errors: 默认值off,开启后在处理SSI文件出错时不输出错误提示”[an error occurred while processing the directive]”。
ssi_types: 默认是text/html,所以如果需支持html,则不需要设置这句,如果需要支持shtml则需要设置:ssi_types text/shtml
三个参数可以放在http, server或location作用域下。

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 10.3.9.27:80;
server_name www.ball.com;
location / {
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;
index index.shtml;
root /usr/local/web/wwwroot;
expires 30d;
access_log /data/logs/www.ball.com-access_log main;
}
}

SSI 命令

SSI的语法有点像HTML注释,所以如果SSI不能识别,那么将被视作HTML注释处理。SSI的语法功能主要包括:变量的设置/获取,文件的引用,可执行命令,条件表达式等。

基本语法 <!--#command param="value"-->

SSI 语法需注意以下几点:

  1. <!–与#之间无空格
  2. SSI 对大小写敏感
  3. 所有 value 均要写在引号中

参考文章