ASP.NET 自定义404错误页面

默认情况下微软已经在 Web.config 加入了如下代码:

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>

但对于SEO来说,这样是不可取得,因为这种转向的HTTP Status-Code是302!

302 redirect: 302代表暂时性转移(Temporarily Moved ),在前些年,不少Black Hat SEO曾广泛应用这项技术作弊,目前,各大主要搜索引擎均加强了打击力度,象Google前些年对Business.com以及近来对BMW德国网站的惩罚。即使网站客观上不是spam,也很容易被搜寻引擎容易误判为spam而遭到惩罚。


我们希望自定义ASP.NET 404错误,但又不希望使用ASP.NET默认的302转向的方法,我们要制作两个404页面404b.aspx和404b.htm

在IIS中指定404错误到静态404b.htm,然后我们还需要修改Web.config:

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

我们必须把redirectMode设成"ResponseRewrite",这样ASP.NET才不会用302给我们转向。

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


到这一步还没有完,因为这时候的.aspx等应用程序文件的没有找到资源的错误转向的HTTP Status-Code却变成了200 OK:)

这时候大家应该明白了为什么建2个404页面了吧,404b.aspx页面就是为ASP.NET 404错误准备的,在404b.aspx的Page_Load事件中加入:

Response.Status = "404 Not Found";

整个Page_Load段代码类似:

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

这样我们再在我们的站点中随意输入一个网址就能看到我们先前设置的404错误页面了,而且不管是静态文件还是asp.net的动态文件,HTTP Status-Code都是404 Not Found。

posted @ 2013-06-13 21:24  Lvni  阅读(707)  评论(0编辑  收藏  举报