无忧技术网 - RSS订阅 
无忧技术网

Apache的SSI(服务端包含)


作者:[佚名] - 发布:2010-4-22 17:35:38 - 来源:无忧技术网

定义:

SSI(服务器端包含)提供了一种对现有HTML文档增加动态内容的方法。

作用:

一般出于效率的考虑,网站都会把内容尽可能的静态化成HTML文件,但是网站页面的布局往往比较复杂,各个部分的更新频率并不一致,比如说:一个显示“文章内容”的页面,很可能在旁边会有一个“每天最热文章TOP10”之类的列表,这个列表的内容是要每天更新的,而文章内容本身一般不会那么频繁的更新,对于这样的问题可以用Apache的SSI来解决,从感觉上讲,其作用和PHP中的inlucde文件类似。

配置:

配置SSI很简单,既可以把配置代码写在httpd.conf里,也可以写在.htaccess文件里,这里以httpd.conf文件为例来说明,打开你的httpd.conf文件,在相应的<Directory "......">里只要键入下面代码就可以激活SSI:

Options Includes
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

这样,你所有扩展名为shtml的文件都具有了SSI的能力,这里需要注意的是,如果我们不需要在shtml文件里执行exec指令,那么就应该尽可能的禁止它,以便获得最大的安全性,所以推荐的配置代码变成:

Options IncludesNOEXEC
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

注意:以上配置代码以Apache2.0.X版本为准,如果你的版本属于Apache1.3.X系列,则其中的“AddOutputFilter INCLUDES .shtml”应该换成“AddHandler server-parsed .shtm”。

另外还有一种XBitHack的配置方法,但是并不推荐,想了解的可以看手册。

应用:

下面看看具体页面应该如何编写,还是以开头说的情况为例,我们假设“每天最热文章TOP10”的代码每天都会由Crontab程序自动静态化成top10.html文件,那么在我们的文章显示页面的里,可以使用如下的代码来引用top10.html页面:

1. <!--#include file="top10.html"-->
2. <!--#include virtual="top10.html"-->

file和virtual的区别在于:file属性是一个相对于当前目录的文件路径,即不能是一个绝对路径以“/”开头或包含“../”的路径。virtual属性可能更有用,它是一个相对于被提供的文档的URL ,可以以“/”开头,但必须与被提供的文档位于同一服务器上。

当然,SSI的能力远不止于此,手册上对相关的指令有详细的介绍,这里只是介绍了SSI最常用的功能而已。

实战:

某公司有一个CMS(文章管理系统),首页,列表页,显示页都已经静态化,相应的头尾部分使用SSI搞定,大致如下:

<!--#include virtual="head.shtml"-->
<!--#include virtual="foot.shtml"-->

此时,业务部门和一些公司达成了许多合作意向,其中一条是我们的网站的每个页面都要加上对方网站的头和尾,粗看起来问题比较棘手,因为我们的网站都已经静态化了,难道我们要为每个合作公司再拷贝一份网站不成,那当然是不现实的,别忘了,我们网站原来的头尾都已经使用SSI分离出来了,而且使用的还是shtml格式的头尾,这就是说明我们还可以在头尾文件里包含合作公司的头尾来完成需求,等等,似乎还有疑问,合作公司那么多,我们怎么区分呢?很简单,为每个公司指定的一个子域名,如:A公司的合作页面域名为“a.domain.com”,类推,然后在已经有的SSI文件(head.shtml和foot.shtml)里的适当位置加入下面代码:

<!--#include virtual="${SERVER_NAME}.head.shtml"-->
<!--#include virtual="${SERVER_NAME}.foot.shtml"-->

其中“SERVER_NAME”是环境变量,说白了,就是你为公司指定的那个子域名。如果对应公司的头尾文件都准备好了,那就浏览吧,应该可以自动根据域名来动态加载相应的头尾文件了吧,^_^,搞定!

------------------------------------------------------------------

补充(2006-09-18):今天一台服务器的httpd进程超多,“ps aux | grep httpd | wc -l”查了一些,竟然有二三百多个,感觉负载过大,所以决定干掉apache,网站迁移到lighttpd上,本来一切顺利,但是安装好后,浏览的时候发现页面的SSI没有正常加载,里面的代码和上面说的差不多,如下:

< !--#include virtual="${SERVER_NAME}.head.shtml"-- >
< !--#include virtual="${SERVER_NAME}.foot.shtml"-- >

又是baidu,又是google查了很多,才搞清楚原来apache和lighttpd对SERVER_NAME的解释不同,换成HTTP_HOST就好了,所以以后写SSI的时候,还是应该在可移植性上考虑多点。最终代码如下:

< !--#include virtual="${HTTP_HOST}.head.shtml"-- >
< !--#include virtual="${HTTP_HOST}.foot.shtml"-- >

责任编辑:liqwei
打印本页】【关闭本页】【返回列表
·上一篇:Apache中的.htaccess配置文件
·下一篇:利用压缩网页来提升网站浏览速度
 文章评分
  • current rating
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
 相关文章
·[程序综合]五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) (2015-08-24)
·[IIS]IIS6与Apache共存 (2010-06-17)
·[Apache]什么是APR? (2010-05-14)
·[应用服务器]Apache HTTP Server 与 Tomcat 的三种连接方式介绍 (2010-04-22)
·[Apache]Apache中的.htaccess配置文件 (2010-04-22)
 相关评论
 站点最新文章 更多>> 
·[经典影音]弱点
·[经典影音]萨利机长
·[经典影音]天空之眼
·[管理知识]康奈尔笔记法,提高100%学习效率
·[管理知识]刘强东:我管75000人靠这4张表格
·[管理知识]跟壳牌学HSE管理
·[运营策划]编辑工作内容整理
·[至理名言]奋斗与决定
·[瀚海拾遗]盲人打灯笼之各家论道
·[搞笑段子]中国男足
 站点浏览最多 更多>> 
·[协议规范]http断点续传原理:http头 Range、…
·[JS/CSS/HTML]HTML 空格的表示符号 nbsp / en…
·[NoSQL]Mongo数据库简介
·[协议规范]什么是SPF记录?如何设置、检测SP…
·[协议规范]图解 HTTPS 通信过程
·[PHP]精选国外免费PHP空间推荐
·[程序综合]常用IP地址查询接口
·[程序综合]什么是 DNS Prefetch ?
·[程序综合]获取客户端IP地址的三个HTTP请求…
·[Linux]/usr 目录的由来