nginx下使用SSI

什么是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" -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值