Apache–SSI 服务器端包含

(参考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,以便旧的文章页的关注也能够实时更新。

如何使你的Apache服务端支持SSI?

Apache默认是不支持SSI的,需要我们更改httpd.conf来进行配置。

我这里以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

SSI指令基本格式

程序代码:   <!-– 指令名称="指令参数">

如 程序代码:   <!--#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手册。

#include指令详解

Include命令可以把其它文档中的文字或图片插入到当前被解析的文档中,这是整个SSI的关键所在。通过Include命令只需要改动一个文件就可以瞬间更新整个站点!

Include命令具有两个不同的参数:

Virtual:给出到服务器端某个文档的虚拟路径。例如:<!--#include virtual="/includes/header.html" --> (我的理解就是相对于网站根目录的路径)

File:给出当前目录的相对路径其中不能使用"../",也不能使用绝对路径。例如: <!--#include file="header.html" -->   这就要求每一个目录中都包含一个header.html文件。(我的理解就是被包含的文件与该文件同级或者下一级目录或下下..级目录下的文件,如同级的test.html,或者同级目录下的test/test1.html)

在使用<!--#include virtual=时,遇到一个问题,就是引入的文件同其不在同一个域名下,但是在同一台服务器上。通过在当前域名下建立到其他域名的文件的软链接(符号链接)解决。

SSI固然不能替代CGI或者其他动态页面技术,但它是在页面中插入众多小型的动态片段的优秀方法,而无须大量额外的操作。

SSI的include对SEO有没有影响?

参考一下这边文章,http://www.alixixi.com/program/a/2008070720488.shtml

个人觉得除了服务器需要多做一些工作外,通过include和直接写在页面上对外提供的页面内容是相同的,也就不会影响SEO.

<<  By Breeze_life  转载请注明出处:http://blog.csdn.net/breeze_life/article/details/8282254 >>

PHP读取时注意

直接用fread或者file_get_contents读取包含ssi include后输出,内容仍然会被解析,而不是显示原始的代码,需要对读取到的字符串html转义后再输出。

$str = htmlspecialchars($str); //对html转义

 

via http://blog.csdn.net/breeze_life/article/details/8282254

Apache–SSI 服务器端包含
标签: