日期:2014-05-16 浏览次数:20815 次
(参考apache手册及百度百科:http://baike.baidu.com/view/188371.htm)
访问静态页面时,页面有一个模块无法显示并报错“an error occurred while processing this directive”,查看原html文件,发现该处是通过SSI的命令include进来的:
<!--#include virtual="/html/attention/expo.html"--> 通过改正引入文件的路径,成功引入。这里做一下笔记:
【SSI】
Server Side Include,服务器端嵌入(包含),以apache为例,SSI是通过apche的mod_include模块实现的,是指服务器将内容发送给浏览器之前,根据页面中的指令,对页面进行处理的过程。这是apache中文手册的定义:'SSI是嵌入HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。
至于什么时候应当用SSI,而什么时候应当用某些程序生成整个页面,取决于页面中有多少内容是静态的,又有多少内容需要在每次页面被提供时重新计算SSI是一种增加小段动态信息的好方法,比如当前时间。如果你的页面大部分内容是在被提供时动态生成的,那就要另找方案了。
”我遇到的是在文章页引入“关注”模块,文章是不变的,但是关注每天都不同,因此采用SSI,以便旧的文章页的关注也能够实时更新。
我这里以windows平台的Apache 2.0.x为例:打开conf目录下的httpd.conf文件,
1. 搜索“AddType text/html .shtml”,搜索结果: # AddType text/html .shtml # AddOutputFilter INCLUDES .shtml 把这两行前面的#去掉。
(解释: 并非所有文件中的ssi指令都会被解析,必须告诉Apache应该解析哪些文件。如果我们的指令放在了.htm类型的文件中,那么就需要在上面两条命令中分别加入.htm一项,否则便不会解析未指定的文件中的ssi命令。 因为命令是放在注释中的,故不解析的将显示空。
有两种方法使Apache解析带有特定后缀名的文件,上面这是一种,另一种是使用 xBitHack命令,详见apache手册)
2. 然后搜索“Options Indexes FollowSymLinks” 在搜索到的那一行后面添加“ Includes” 即将该行改变为: Options Indexes FollowSymLinks Includes
如 程序代码: <!--#include file="info.htm"-->
说明: 1.<!-- -->;是HTML语法中表示注释,当WEB服务器不支持SSI时,会忽略这些信息。
2.#include 为SSI指令之一。
3.file 为include的参数,info.htm为参数值,在本指令中指将要包含的文档名。
注意: 1.<!--与#号间无空格,只有SSI指令与参数间存在空格。
2.上面的标点="",一个也不能少。
3.SSI指令是大小写敏感的,因此参数必须是小写才会起作用。
SSI指令
除了include指令,ssi还有很多很帅的指令,如:echo config exec set 甚至条件表达式if else ,详细见apache手册。