Asp.Net 404页面状态码设置,JoeyChou

Asp.Net 404页面状态码设置

什么是404错误

HTTP 404 错误意味着链接指向的网页不存在,即原始网页的URL失效,这种情况经常会发生,很难避免,比如说:网页URL生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的URL地址无法访问;当Web 服务器接到类似请求时,会返回一个404 状态码,告诉浏览器要请求的资源并不存在。但是,Web服务器默认的404错误页面,无论Apache还是IIS,均十分简陋、呆板且对用户不友好,无法给用户提供必要的信息以获取更多线索,无疑这会造成用户的流失。

404页面的作用

搜索引擎通过HTTP状态码来识别网页的状态。当搜索引擎获得了一个错误链接时,网站应该返回404状态码,告诉搜索引擎放弃对该链接的索引。而如果返回200或302状态码,搜索引擎就会为该链接建立索引,这导致大量不同的链接指向了相同的网页内容。结果是,搜索引擎对该网站的信任度大幅降低。

如何检查自定义404页面能够返回“404”状态码

在自定义404错误页面设置完毕后,一定要检查一下其是不是能够正确地返回“404”状态码。检查的方法也相当简单,输入一个网站内不存在网页的url,查看一下HTTP Header的返回情况,确信其返回的是“404”状态码。

404页面的正确做法

1、Apache服务器404页面的设置方法

在.htaccess 文件中加入代码:ErrorDocument 404 /Error.html

建立一个简单的html404页面命名 Error.html

把 Error.html放置在网站根目录即可。

2、IIS/ASP.net下设置404错误页面

首先,修改应用程序根目录的设置,打开 “web.config” 文件编辑,在其中加入如下内容:


<configuration>
<system.web>
<customErrors mode=”On” defaultRedirect=”error.asp”>
<error statusCode=”404″ redirect=”notfound.asp” />
</customErrors>
</system.web>
</configuration>


此例中“error.asp”为系统默认的404页面,“notfound.asp”为自定义的404页面,使用时请修改相应文件名。

然后,在自定义的404页面“notfound.asp”中加入:

<%
Response.Status = “404 Not Found”
%>

这样,便可以保证IIS能够正确地返回“404”状态码

友情提醒

1、一定不要将404错误直接转向到网站首页,这将可能导致你的网站首页不被收录;

2、/Error.html 前面请不要带主域名(错误的写法:yzznl.cn/error.html,正确的写法:/error.html),否者返回的状态码是302或200状态码。

从网上搜索asp.net网站如何自定义404错误页面时,大多数文章都是告诉你在web.config中,找到system.web,配置以下内容即可。


<customErrors mode="On" error statusCode="404" redirect="/404.htm" > 
</customErrors>


实际上这样做之后,根本就得不到404未找到网页的网页头信息,得到的是302临时重定向的网页头信息。大家可以用 Check Headers Tool 工具查看 HTTP Status Codes就知道了。

那么如何正确配置asp.net网站的自定义404错误网页呢?

首先制作一个404.aspx页面,然后在web.config文件下的customeErrors中如下配置:

<customErrors redirectMode="ResponseRewrite" 
error statusCode="404" redirect="~/404.aspx">
</customErrors>


RedirectMode有两种属性。
ResponseRedirect是指将用户重定向到该错误页面,并且原始 URL 更改为该错误页面的 URL。
ResponseRewrite是指将用户定向到错误页面,并且不更改浏览器中的原始 URL。

然后再在404.aspx.cs文件中,为Page_Load事件中加入以下代码:


protected void Page_Load(object sender, EventArgs e) 
{ 
Response.Status = "404 Not Found"; 
}


经过这样设置之后,HTTP Status Code 才会是 404 Not Found。