网站设置404错误页的经历

  设置404错误页的意义我就不说了。主要想记录一下这次设置错误页遇到的问题和解决方法。

第一版:本地测试能跳转到自定义的404页面,上线之后却没能跳转。

  因为之前的项目有跳转404页面的例子,所以直接拷贝了一份到现在的项目,代码如下:

HomeController

public ActionResult Index()
{
  Response.StatusCode = 404;
  Response.Charset = "utf-8";
  return View("404");
}

Web.config

    <customErrors defaultRedirect = "home/error" mode="On">
      <error statusCode="404" redirect="/home/error"/>
    </customErrors>

按照上面的代码书写,本地测试跳转到了自定义的404页,上线之后却是默认的404页。就这样,第一个版本失败了。

 

第二版:上线之后可以正常跳转至404页面,状态码却返回302。

  开发中"本地环境可以,生产环境却不行"的情况屡见不鲜。后来干脆在阿里云租了一台服务器,这里有个小插曲,我发布了一个测试版本不能正常运行,

原因是这个"HTTP 错误 404.0 - Not-Found"。

  测试版本跑通之后,发现线上没有跳转自定义404页的原因是没有设置IIS。设置步骤如下图:

1.找到IIS的404错误页选项(IIS里还有ASP.NET的.NET错误页,这里最好选IIS的错误页,下面有写原因)

2.打开错误页后,编辑自定义错误页,这里以相当路径设置错误页url(IIS的版本不一样,编辑自定义错误页的窗口也不一样)

  设置OK之后,本以为大功告成,却发现根本错误,返回状态码是302,"Response.StatusCode = 404"也没强撸过来。

 

  至此,第二个版本还是失败了。

 

第三版:利用httpErrors设置网站404页跳转(正确版本)

  之后了解到customErrors会以302重定向跳转至自定义错误页,虽然跳转到了自定义错误页,但状态码却不对,并且url都会带参数aspxerrorpath。

httpErrors只需要配置一下Web.config即可,配置好之后会自动映射到IIS:

Web.config

    <httpErrors errorMode="Custom" existingResponse="Replace">
      <clear />
      <error statusCode="404" path="Error\404.html" />
      <error statusCode="500" path="Error\500.html" />
    </httpErrors>

映射之后的IIS

  到这自定义404页才算设置正确,用户请求的错误的url会跳转至自定义404页,状态码返回404,并且保持原url。

 

分析:ASP.NET下的.NET错误页和IIS下的错误页有什么区别?

  在Web.config中,分别配置<customErrors>和<httpErrors>节点即可完成两者错误页的设置。主要有以下不同点:

1.从定义上,<customErrors>设置ASP.NET应用程序的错误;<httpErrors>是IIS7.0新增的特性,设置IIS对http请求的错误处理;

2.Visual Studio提供了一个脱离IIS但能执行ASP.NET的环境。想必<customErrors>就是为其准备的;

3.<httpErrors>优先级要高于<customErrors>。这也是"在本地可以,一上线就不行了"的一个原因。

 

posted @ 2015-09-11 14:57  paulhe  阅读(5691)  评论(0编辑  收藏  举报
friendster counter