什么是SSI
SSI:Server Side Include,是一种基于服务端的网页制作技术。它的工作原理是:在页面内容发送到客户端之前,使用SSI指令将文本、图片或代码信息包含到网页中。对于在多个文件中重复出现内容,使用SSI是一种简便的方法,将内容存入一个包含文件中即可,不必在所有文件中重复。通过一个非常简单的语句即可调用包含文件,此语句指示 Web 服务器将内容插入适当网页。
nginx开启SSI
在nginx.conf设置。三个最基本的指令:
- ssi on;
- 开启ssi支持,默认是关闭的
- ssi_silent_errors on;
- 开启后在处理SSI文件出错时不输出错误提示:"[an error occurred while processing the directive] "。默认是关闭的
- ssi_types text/shtml;
- 默认是text/html。如果需要shtml支持,则需要设置:ssi_types text/shtml。
这三行的配置可以放在nginx的三个作用域下面(http, server, location)。
location / {
ssi on;
...
}
更多指令可参看:nginx指令文档
SSI常用命令
命令语法如下:
<!--# command parameter1=value1 parameter2=value2 ... -->
最常用的应该是include:
<!--# include file="footer.html" -->
<!--# include virtual="/remote/body.php?argument=value" -->
file文件名是一个相对路径,该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中,但不能在上一级目录中。
virtual文件名是一个web请求路径,当然应该是本服务器上的。可以是绝对或相对路径,但不能通过".."访问上层路径。
其它命令还是看这儿吧:nginx命令文档
SSI获取并使用查询参数
获取参数有两种方式:
- 在页面文件中获取;
- 在nginx的配置文件中设置。
在页面文件中获取
在页面中写如下代码取得p1和p2参数:
<!--#if expr="$QUERY_STRING = /\bp1=(?P<p1>[a-zA-Z0-9]+)/" -->
<!--#endif -->
<!--#if expr="$QUERY_STRING = /\bp2=(?P<p2>[a-zA-Z0-9]+)/" -->
<!--#endif -->
正则表达式中的"\b"用来划分单词的边界。“?P<p1>”将解析出的内容赋给变量p1。
在nginx的配置文件中设置
nginx.conf中如下代码:
location /sjjy {
ssi on;
...
set $p3 $arg_p3;
}
可将url中的查询参数p3的值赋给变量p3,供在页面中使用。(在nginx中取url中?后面的变量的值是通过$arg_作为前缀获取的。)
跟从页面中获取方式不同的是,当url中没有参数p3时,通过在配置文件中给p3赋值,p3也有一个空字符串值;但通过页面中代码解析方式,会得到一个空值(none)。
使用参数
可以用echo命令输出:
<!--#echo var="p1" -->
也可以在其它命令中引用:
<!--# include file="${p2}.txt" -->