Apache下开启SSI配置使html支持include包含的方法
写页面的同学通常会遇到这样的烦恼,就是页面上的html标签越来越多的时候,寻找指定的部分就会很困难,那么能不能像javascript一样写在不同的文件中引入呢?答案是有的,apache能做到。
举个简单的例子,比如有如下的html文件(命名为index.html):
<inputtype='text'/> <inputtype='button'value='press'/>
一个简单的文本框和按钮,我现在想把按钮部分的html写在另一个.html的文件中(比如说叫btn.html)然后引入到index.html中,要怎么做呢?
1、加载ssi模块
首先要加载ssi模块。打开apache的配置文件httpd.conf,这个文件应该都已经很熟悉了,前面的文章中多次提到。找到这么一行LoadModulessl_modulemodules/mod_ssl.so,把前面的注释(#)去掉。
2016.01.11更:
经本地测试,此步骤并不是必须的,多谢whuper指出。
2、添加需要的文件类型
同样在httpd.conf文件下找到如下两行代码:
AddTypetext/html.shtml AddOutputFilterINCLUDES.shtml
有注释的话一样去掉注释。因为使用ssi技术的默认文件名为.shtml,所以我们需要在配置文件中对.shtml后缀名进行设置,并按自己的需求设置需要对ssi技术进行解析的文件类型设置。
比如这里我要用.html的文件进行操作,所以可以在上面两行代码末添加,比如这样:
AddTypetext/html.shtml.html AddOutputFilterINCLUDES.shtml.html
3、添加INCLUDES
还是在httpd.conf文件中,找到这样一行OptionsIndexesFollowSymLinks,在后面添加INCLUDES,变成这样:
OptionsIndexesFollowSymLinksINCLUDES
需要注意的是,ssi可以利用shell来执行命令,因此这个功能是有危险的,它会执行任何包含在exec标记中的命令,如果你的用户有权限修改你的网页内容,建议把该功能关闭。当然你还可以加上IncludesNOEXEC参数,来关闭exec功能,同时又保留SSI。此时改为:OptionsIndexesFollowSymLinksINCLUDESIncludesNOEXEC
4、重启apache
最后一点,重启apache千万不能忘记,有些童鞋刚开始配置apache的时候,经常会说怎么不起作用啊,很多时候就是忘记重启了。
5、实践
通过这样的配置我们就能在html页面中引入html文件了,比如这样:
<inputtype='text'/> <!--#includevirtual="btn.html"-->
也可以用file参数:
<inputtype='text'/> <!--#includefile="btn.html"-->
有什么区别呢...
include元素能按file属性或virtual属性判断应该包含的文件。file属性是一个相对于当前目录的文件路径,即不能是一个绝对路径(以"/"开头)或包含"../"的路径,也就是说被包含文件可以在同一级目录或其子目录中,但不能在上一级目录中。virtual属性可能更有用,它是一个相对于被提供的文档的URL,可以以"/"开头,但必须与被提供的文档位于同一服务器上,virtual文件名是Web站点上的虚拟目录的完整路径。
通俗地说,virtual相当于绝对路径(从服务器根目录出发),而file相当于相对路径(而且文件还不能在上级目录)。所以一般用virtual就ok了。
参考:
让Apache支持SHTML(SSI)的配置方法