指引网

当前位置: 主页 > 服务器 > Apache >

Apache开启SSI(shtml)配置使html支持include的步骤

来源:网络 作者:佚名 点击: 时间:2017-06-18 20:47
[摘要]  有时我们希望html页面也能有include包含的功能,这样可以在html页面调用共用的部分,那么apachen支持这样子的配置吗?本文就来告诉你。

举个简单的例子,比如有如下的 html 文件(命名为 index.html):

<input type='text' />
<input type='button' value='press' />

一个简单的文本框和按钮,我现在想把按钮部分的 html 写在另一个 .html 的文件中(比如说叫 btn.html)然后引入到 index.html 中,要怎么做呢?


1、加载 ssi 模块

首先要加载 ssi 模块。打开 apache 的配置文件 httpd.conf,这个文件应该都已经很熟悉了,前面的文章中多次提到。找到这么一行 LoadModule ssl_module modules/mod_ssl.so,把前面的注释(#)去掉。


2、添加需要的文件类型

同样在 httpd.conf 文件下找到如下两行代码:

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

有注释的话一样去掉注释。因为使用 ssi 技术的默认文件名为 .shtml,所以我们需要在配置文件中对 .shtml 后缀名进行设置,并按自己的需求设置需要对 ssi 技术进行解析的文件类型设置。

比如这里我要用 .html 的文件进行操作,所以可以在上面两行代码末添加,比如这样:

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

3、添加 INCLUDES

还是在 httpd.conf 文件中,找到这样一行 Options Indexes FollowSymLinks,在后面添加 INCLUDES,变成这样:

Options Indexes FollowSymLinks INCLUDES

需要注意的是,ssi 可以利用 shell 来执行命令,因此这个功能是有危险的,它会执行任何包含在 exec 标记中的命令,如果你的用户有权限修改你的网页内容,建议把该功能关闭。当然你还可以加上IncludesNOEXEC 参数,来关闭 exec 功能,同时又保留 SSI 。此时改为: Options Indexes FollowSymLinks INCLUDES IncludesNOEXEC


4、重启 apache

最后一点,重启 apache 千万不能忘记,有些童鞋刚开始配置 apache 的时候,经常会说怎么不起作用啊,很多时候就是忘记重启了。


5、实践

通过这样的配置我们就能在 html 页面中引入 html 文件了,比如这样:

<input type='text' />
<!--#include virtual="btn.html" -->

也可以用 file 参数:

<input type='text' />
<!--#include file="btn.html"-->

有什么区别呢...

include 元素能按 file 属性或 virtual 属性判断应该包含的文件。file 属性是一个相对于当前目录的文件路径,即不能是一个绝对路径(以 "/" 开头)或包含 "../" 的路径,也就是说被包含文件可以在同一级目录或其子目录中,但不能在上一级目录中。virtual 属性可能更有用,它是一个相对于被提供的文档的URL ,可以以 "/" 开头,但必须与被提供的文档位于同一服务器上,virtual 文件名是 Web 站点上的虚拟目录的完整路径。

通俗地说,virtual 相当于绝对路径(从服务器根目录出发),而 file 相当于相对路径(而且文件还不能在上级目录)。所以一般用 virtual 就 ok 了。



让Apache支持SHTML(SSI)的配置方法


shtml和asp有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中写入SSI指令,当客户端访问这些shtml文件时,服务器端会把这些SHTML文件进行读取和解释,把SHTML文件中包含的SSI指令解释出来。

服务器采用shtml速度会比html慢,比php快。shtml的特点就是能够进行页面包含,能够局部更新页面包含部分。广泛采用可以很容易解决网页中的广告问题,不需要更新全面静态页面。而只需更新一个包含页面即可。下面我们来看看Apache解析SHTML配置(SSI)的方法:

打开文件,搜索shtml


让Apache支持SHTML(SSI)的配置方法 教程

把最前两行的#号去掉,即成如下


image

如是要想整个服务器配置shtml的话

再搜索Options Indexes FollowSymLinks


image

在里面添加Includes如下所示:


image

OK 重启apache

然后测试,建立两个文件,其实一个叫header.shtml和一个index.shtml

header.shtml代码如下:


image

用了两种形式的包含:如果想要了解,请找相关文档


image

然后访问:


image

shtml配置成功。。。很好很强大吧。

下面再说一下如是不是全局配置,而是分站点配置的话。可以如下:具体本人没有测试过,均来源于网络。

简说一下吧:

file 文件名是一个相对路径,该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中,但不能在上一级目录中。如表示当前目录下的的nav_head.htm文档,则为 file="nav_head.htm"。 virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hoyi目录下的nav_head.htm文件;则为virtual="/hoyi/nav_head.htm"

以上是全局的配置,如是没这样写的话


image

可以在单个目录下设定:

配置虚拟目录可以如下设定:


NameVirtualHost www.xxx.com
<VirtualHost www.xxx.com:80>
    DocumentRoot F:xing ServerName www.xxx.com
</VirtualHost>
<Directory "F:xxx">
Options Indexes FollowSymLinks
Includes AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
AllowOverride None Order allow,deny Allow from all
</Directory>


------分隔线----------------------------