在 IIS 中,通过web.config文件配置#include(服务器端包含 SSI)功能,核心是通过配置处理程序映射(让服务器识别并执行 SSI 指令)和MIME 类型(让浏览器正确解析文件)。以下是完整的配置方法和注意事项(适用于虚拟主机用户或无服务器管理员权限的场景):
一、完整的web.config配置示例
在站点根目录创建或编辑web.config,添加以下内容(针对.shtml、.shtm扩展名,这是 SSI 的默认推荐扩展名):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<!-- 1. 配置MIME类型:确保浏览器将.shtml/.shtm解析为网页 -->
<staticContent>
<mimeMap fileExtension=".shtml" mimeType="text/html" />
<mimeMap fileExtension=".shtm" mimeType="text/html" />
<!-- 若需要在.html中使用SSI,需添加以下行(不推荐,可能影响性能) -->
<!-- <mimeMap fileExtension=".html" mimeType="text/html" /> -->
</staticContent>
<!-- 2. 配置处理程序映射:让IIS用SSI模块处理.shtml/.shtm文件 -->
<handlers>
<!-- 处理.shtml文件 -->
<add
name="SSI-shtml" <!-- 唯一名称,避免与其他处理程序冲突 -->
path="*.shtml" <!-- 匹配的文件扩展名 -->
verb="GET,HEAD" <!-- 允许的HTTP方法(GET/HEAD足够,POST可选) -->
modules="ServerSideIncludeModule" <!-- 启用SSI核心模块 -->
scriptProcessor="%windir%\system32\inetsrv\ssinc.dll" <!-- SSI处理程序路径 -->
resourceType="File" <!-- 表示处理的是文件类型 -->
requireAccess="Read" <!-- 仅需要读取权限 -->
/>
<!-- 处理.shtm文件 -->
<add
name="SSI-shtm"
path="*.shtm"
verb="GET,HEAD"
modules="ServerSideIncludeModule"
scriptProcessor="%windir%\system32\inetsrv\ssinc.dll"
resourceType="File"
requireAccess="Read"
/>
<!-- 若需要在.html中使用SSI,需添加以下行(不推荐) -->
<!-- <add name="SSI-html" path="*.html" verb="GET,HEAD" modules="ServerSideIncludeModule" scriptProcessor="%windir%\system32\inetsrv\ssinc.dll" resourceType="File" requireAccess="Read" /> -->
</handlers>
<!-- 3. 可选:限制SSI指令(增强安全性,仅允许#include) -->
<serverSideInclude>
<add fileExtension=".shtml" allowedDirectives="Include" /> <!-- 仅允许#include指令 -->
<add fileExtension=".shtm" allowedDirectives="Include" />
</serverSideInclude>
</system.webServer>
</configuration>
二、配置说明(各部分作用)
- staticContent(MIME 类型配置)
作用:告诉浏览器和服务器,.shtml/.shtm文件的内容类型是text/html,浏览器会按网页解析(而非下载或显示纯文本)。
-
- 若缺少此配置,访问.shtml可能出现 “404.3 错误”(MIME 类型缺失),或浏览器直接下载文件。
- handlers(处理程序映射)
作用:告诉 IIS,当请求.shtml/.shtm文件时,使用ServerSideIncludeModule模块和ssinc.dll处理器,执行文件中的#include等 SSI 指令。
-
- modules="ServerSideIncludeModule":必须启用 SSI 核心模块(服务器需安装,虚拟主机需服务商支持)。
-
- scriptProcessor:指定 SSI 处理程序的路径(%windir%对应系统目录,通常为C:\Windows)。
- serverSideInclude(可选,安全限制)
作用:限制 SSI 允许的指令(默认可能允许#exec等危险指令,可能执行系统命令)。
-
- allowedDirectives="Include":仅允许#include指令,禁止#exec、#config等,增强安全性。
三、测试配置是否生效
- 创建被包含文件header.html(内容示例):
<h2>这是被包含的头部内容</h2>
- 创建主文件test.shtml(使用#include):
<!DOCTYPE html>
<html>
<body>
<!-- 包含同目录的header.html(相对路径) -->
<!--#include file="header.html" -->
<p>这是主页面内容</p>
</body>
</html>
- 访问http://你的域名/test.shtml:
-
- 若页面显示 “这是被包含的头部内容”+“这是主页面内容”,说明配置生效。
-
- 若显示<!--#include...-->原文,或报错,说明配置未生效(见下方问题排查)。
四、常见问题与解决
- 500.19 错误(配置无效)
-
- 原因:web.config语法错误(如标签未闭合、属性缺失),或重复配置(如同一扩展名的mimeMap被多次添加)。
-
- 解决:检查 XML 格式,删除重复的mimeMap或handlers配置(例如服务器全局已配置.html的 MIME 类型,无需在web.config中重复添加)。
- 500.21 错误(模块未安装)
-
- 原因:服务器未安装ServerSideIncludeModule模块(SSI 核心依赖)。
-
- 解决:联系虚拟主机服务商,要求启用 “服务器端包含(SSI)” 模块(管理员需在服务器管理器中安装,见前文步骤)。
- #include指令不执行(显示原文)
-
- 原因 1:文件扩展名不是.shtml/.shtm(配置中仅映射了这两个扩展名)。
-
- 原因 2:handlers配置错误(如modules或scriptProcessor路径错误)。
-
- 解决:确保文件扩展名为.shtml,检查web.config中handlers的modules和scriptProcessor是否正确。
- 404.3 错误(MIME 类型缺失)
-
- 原因:.shtml/.shtm未配置 MIME 类型。
-
- 解决:检查staticContent中是否添加了对应的mimeMap。
五、注意事项
- 不建议在.html中使用 SSI:默认.html由静态文件模块处理,强制添加 SSI 映射可能导致性能下降或与其他配置冲突。
- 路径写法:
-
- <!--#include file="header.html" -->:相对当前文件的路径(适合同目录或子目录)。
-
- <!--#include virtual="/header.html" -->:相对站点根目录的路径(推荐,避免层级混乱)。
- 虚拟主机限制:部分主机可能锁定handlers或staticContent配置节,导致web.config修改无效,需联系服务商后台配置。
通过以上配置,即可在 IIS 中通过web.config启用#include功能,核心是确保 “处理程序映射 + MIME 类型” 配置正确,且服务器支持 SSI 模块。
