SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针。
SSI功能非常强大(这个是别人说的)。在我看来,它的作用也就是实现静态网页的局部动态更新。但就是这一点,帮了我们很大的忙。尤其是在多个静态网页包含了同样的内容的时候。如果这一部分内容需要更新,在不使用SSI包含功能的时候,就需要把所有的静态网页更新一遍。这是一个非常繁琐又容易出错的工作。这个时候SSI就派上用场了。把静态页中需要更新的部分单独拿出来,写入html文件中,然后将这个文件使用<!--include virtual=""-->形式包含到所有的静态文件,一般是.shtml文件。这样,只要更新这个html文件的内容,所有.shtml文件的内容就跟着变化了。可谓是一劳永逸。
在Apache中配置SSI
1、开启mime_module, 即找到 #LoadModule mime_module modules/mod_mime.so ,去掉前面的#号。如果已经去掉了,忽略这条。
2、添加类型,在mime_module内部添加所有可能包含的类型
AddType text/html .shtml .html .htm .tpl .ssi AddOutputFilter INCLUDES .shtml .html .htm .tpl .php
3、配置Options指令。搜索 Options Indexes FollowSymLinks,在后面加Includes, 成为 Options Indexes FollowSymLinks Includes
到此为止,SSI已配置完成,一般情况下,包含文件就OK啦。
文件包含引用的方法:
引用绝对路径的文件:<!--#include file="e:/w2/top.shtml"-->
引用当前虚拟目录文件:<!--#include virtual="include/top.html"-->
路径要写正确,路径不正确会报错:[an error occurred while processing this directive]
还可以这么用: <!--#echo var="DATE_LOCAL" --> 输出当地时间。
但是,在我自己的开发环境下,上面的这些怎么配置都无法实现。
看了好多文档,做了很多尝试,最后发现把Apache的配置中的 AllowOverride All 改为AllowOverride None 。引用包含文件就不会报错了。
但是这样就会把 .htaccess文件完全屏蔽,这样,写在.htaccess文件中的其他命令也就不起任何作用了。改为 AllowOverride FileInfo, .htaccess恢复使用。这是文件包含又不能用。查了一下.htaccess文件,发现里面只有url rewrite相关的内容。于是,我便做了以下改动:
.htaccess文件里的内容都放在Apache配置文件里
把.htaccess文件彻底删除。
修改AllowOverride配置为:AllowOverride None
这下,包含文件的问题,路径重写的问题全都搞定了。
关于Options指令:
Options指令是Apache配置文件中一个比较常见也比较重要的指令,Options指令可以在Apache服务器核心配置(server config)、虚拟主机配置(virtual host)、特定目录配置(directory)以及.htaccess文件中使用。Options指令的主要作用是控制特定目录将启用哪些服务器特性。
根据以上说法,可以根据需要,在不同的地方加 Options指令,可以单独的 Options Includes, 也可以使用复合的 Options Indexes FollowSymLinks Includes,具体指令的意思,可以参考手册。
在使用了虚拟机的服务器中,如果之想在某个虚拟机中使用Includes,可以只在虚拟机中配置Options Includes.
关于AllowOverride:
Apache的配置文件httpd.conf是主要的配置文件,但是针对每个目录,apache还允许在它们各自的目录下防止一个叫做.htacess的文件,这个文件同样也能控制这个目录的属性
AllowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件,如果设置为All,那么所有在.htaccess文件里有的指令都将被重写。对于AllowOverride,还可以对它指定如下一些能被重写的指令类型.
1、AuthConfig 允许使用所有的权限指令,他们包括AuthDBMGroupFile AuthDBMUserFile AuthGroupFile AuthName AuthTypeAuthUserFile和Require
2、FileInfo 允许使用文件控制类型的指令。它们包括AddEncoding AddLanguage AddType DEfaultType ErrorDocument LanguagePriority
3、Indexes 允许使用目录控制类型的指令。它们包括AddDescription AddIcon AddIconByEncoding AddIconByType DefaultIcon DirectoryIndex FancyIndexing HeaderName IndexIgnore IndexOptions ReadmeName
4、Limit 允许使用权限控制指令。它们包括Allow Deny和Order
5、Options 允许使用控制目录特征的指令.他们包括Options 和XBitHack
Options
1、All 准许以下除MultiViews以外所有功能
2、MultiViews 允许多重内容被浏览,如果你的目录下有一个叫做foo.txt的文件,那么你可以通过/foo来访问到它,这对于一个多语言内容的站点比较有用
3、Indexes 若该目录下无index文件,则准许显示该目录下的文件以供选择
4、IncludesNOEXEC 准许SSI,但不可使用#exec和#include功能
5、Includes 准许SSI
6、FollowSymLinks 在该目录中,服务器将跟踪符号链接。注意,即使服务器跟踪符号链接,它也不会改变用来匹配不同区域的路径名,如果在<Local>;标记内设置,该选项会被忽略
7、SymLinksIfOwnerMatch 在该目录中仅仅跟踪本站点内的链接
8、ExecCGI 在该目录下准许使用CGI
Apache虚拟主机配置范例
ServerAdmin xxx@example.com ServerName xxx.example.com DocumentRoot D:/wamp/www/xxx.example.com/web ErrorLog "logs/xxx-error.log" CustomLog "logs/xxx-access.log" common #路径重写 RewriteEngine on RewriteCond $1 !^(index\.php|/ajax|/images|/css|/scripts|/assets|/html|robots\.txt) RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^(.*)$ /index.php/$1 [L] Options Indexes FollowSymLinks Includes #包含配置 Order Deny,Allow Deny from all Allow from all