在ASP.NET应用程序部署到IIS服务器后,当站点出现运行时错误时,默认会展示IIS自带的错误页面,这类页面既暴露了系统细节也存在体验问题。通过Web.config文件中的customErrors配置节点,开发者可以自定义错误页面的重定向规则,控制不同场景下错误信息的展示方式。

customErrors节点基础结构
customErrors是Web.config中<system.web>节点下的子配置项,用于控制ASP.NET应用程序的自定义错误页面设置。它的核心属性是mode,用来指定错误重定向的模式,同时可以配置defaultRedirect作为默认的错误跳转地址。
基础配置结构如下:
<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="/error.html">
</customErrors>
</system.web>
</configuration>
三种重定向模式详解
1. mode="On" 开启重定向模式
该模式下,无论访问者是本地还是远程用户,只要应用程序出现错误,都会跳转到defaultRedirect指定的页面,不会展示任何错误细节。这是生产环境最常用的配置,能够避免敏感信息泄露。
配置示例:
<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="/500.html">
<error statusCode="404" redirect="/404.html" />
<error statusCode="403" redirect="/403.html" />
</customErrors>
</system.web>
</configuration>
上述配置中,除了默认的500错误跳转到500.html,还单独指定了404和403状态码对应的跳转页面,实现不同错误类型的差异化处理。
2. mode="Off" 关闭重定向模式
该模式下,自定义错误页面配置完全失效,所有用户都会看到详细的错误堆栈信息,包括代码行号、异常类型等敏感内容。这个模式仅适合开发调试阶段使用,方便开发者定位问题,绝对不能在生产环境开启。
配置示例:
<configuration>
<system.web>
<customErrors mode="Off" />
</system.web>
</configuration>
3. mode="RemoteOnly" 仅远程重定向模式
该模式下,本地访问服务器的用户(即服务器本机浏览器访问)会看到详细的错误堆栈信息,而远程访问的用户会被重定向到自定义错误页面。这个模式兼顾了调试便利性和生产环境的安全性,适合测试环境或者需要临时排查问题的生产场景。
配置示例:
<configuration>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/error.html" />
</system.web>
</configuration>
自定义错误页面配置注意事项
- redirect指定的路径可以是相对路径也可以是绝对路径,建议使用相对路径避免站点部署路径变更导致跳转失效。
- 自定义错误页面本身不能存在错误,否则会出现循环重定向的问题,导致页面无法正常展示。
- 如果IIS层面也配置了错误页,需要注意IIS的错误页配置优先级高于ASP.NET的customErrors配置,需要关闭IIS的对应错误页功能才能让customErrors生效。
- 状态码映射的error节点仅支持标准的HTTP状态码,自定义状态码无法生效。
常见问题排查
如果配置完成后自定义错误页面没有生效,可以按照以下步骤排查:
- 检查customErrors节点的mode是否正确设置,确认没有拼写错误。
- 检查defaultRedirect或者error节点的redirect路径是否正确,对应的页面是否存在且可访问。
- 检查IIS的错误页配置,确认没有覆盖ASP.NET的错误配置。
- 检查应用程序池的.NET版本是否和配置匹配,避免版本不兼容导致配置失效。
以下是检查IIS错误页配置的C#代码示例,用来验证当前站点的错误页配置是否被覆盖:
using System;
using System.Web.Configuration;
public class ErrorConfigChecker
{
public static void CheckCustomErrors()
{
// 获取当前站点的Web.config配置
Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
CustomErrorsSection customErrors = (CustomErrorsSection)config.GetSection("system.web/customErrors");
if (customErrors != null)
{
Console.WriteLine("当前customErrors模式:" + customErrors.Mode);
Console.WriteLine("默认重定向地址:" + customErrors.DefaultRedirect);
}
else
{
Console.WriteLine("未找到customErrors配置节点");
}
}
}
customErrorsIIS错误页面Web.config配置重定向模式修改时间:2026-07-15 01:21:30