什么是 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 | AddType text/html .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 | server { |
SSI 命令
SSI的语法有点像HTML注释,所以如果SSI不能识别,那么将被视作HTML注释处理。SSI的语法功能主要包括:变量的设置/获取,文件的引用,可执行命令,条件表达式等。
基本语法
<!--#command param="value"-->
SSI 语法需注意以下几点:
- <!–与#之间无空格
- SSI 对大小写敏感
- 所有 value 均要写在引号中