Web.config错误页面路由异常:404/500跳转问题排查
解决IIS自定义404/500错误页面跳转异常问题
看起来你用IIS的<httpErrors>配置了自定义错误跳转,但遇到了异常情况。结合我之前踩过的坑,大概率是下面两种常见问题,对应给你解决方案:
第一种异常:自定义页面显示正常,但HTTP状态码变成200(而非404/500)
这种情况对SEO非常不友好,搜索引擎会误以为这个页面是正常存在的。原因是ExecuteURL模式下,IIS默认会把响应状态码改成200。解决办法很简单,在对应的MVC Action里手动设置状态码,并告诉IIS不要覆盖:
public ActionResult PageNotFound() { // 保留404状态码 Response.StatusCode = 404; // 阻止IIS替换我们设置的状态码 Response.TrySkipIisCustomErrors = true; return View(); } // 500错误页同理 public ActionResult InternalServerError() { Response.StatusCode = 500; Response.TrySkipIisCustomErrors = true; return View(); }
第二种异常:跳转后出现空白页,或者提示“无法找到资源”
这种情况一般是路由或视图配置出了问题,你可以按以下步骤排查:
- 先确认
HomeController里确实存在PageNotFound和InternalServerError这两个Action方法,且没有拼写错误 - 检查对应的View文件是否存在于
~/Views/Home/目录下(比如PageNotFound.cshtml) - 如果你的项目有自定义路由规则,确保没有拦截
/Home/PageNotFound这类请求 - 另外,检查web.config里的
<httpErrors>是否放在<system.webServer>节点下,这个位置错了配置是不生效的
额外配置建议:结合ASP.NET的<customErrors>节点
为了覆盖更多场景(比如MVC请求的错误和静态文件的错误),建议同时在<system.web>节点下配置<customErrors>作为补充:
<system.web> <customErrors mode="On" defaultRedirect="~/Home/InternalServerError"> <error statusCode="404" redirect="~/Home/PageNotFound" /> </customErrors> </system.web>
<customErrors>是ASP.NET框架层面的处理,<httpErrors>是IIS层面的,两者配合能让你的错误页覆盖所有请求类型。
最后再提醒一句:不要在IIS管理器里手动设置错误页,保持web.config的配置和IIS后台一致,避免出现配置冲突。
内容的提问来源于stack exchange,提问作者Bradley William Elko
相关产品推荐
相关产品推荐

