首页 文章

如何返回'own' 404自定义页面?

提问于
浏览
15

如果我的网站发生错误,我会执行以下操作:

Server.Transfer("/error.aspx");

那个页面有代码:

protected void Page_Load(object sender, EventArgs e)
{
    ...

    Response.StatusCode = 404;
}

如果我在localhost上工作,那么返回页面的404状态,页面显示“正确的错误描述” .

一旦我向互联网发布了相同的代码,所有有错误的页面仍然会显示404状态代码,但是没有内容 . 相反,他们有标准的404错误消息:

404 - 找不到文件或目录 .

如果“Response.StatusCode = 404”行被注释掉,那么提供了正确的页面,但它有200个状态代码 .

Question: 如何返回用户友好的错误页面,同时有404错误状态码?

欢迎任何想法!非常感谢提前!

附: ASP.NET 4.0

6 回答

  • 10
    <customErrors mode="On" defaultRedirect="~/Error/GenericErrorPage.aspx">
    
         <error statusCode="404" redirect="~/Error/404.aspx" />
    
    </customErrors>
    

    http://msdn.microsoft.com/en-us/library/h0hfz6fc(v=vs.71).aspx

    http://msdn.microsoft.com/en-us/library/aa479319.aspx

  • 6

    哈!

    试试这个:

    Response.TrySkipIisCustomErrors = true;
    Response.Status = "404 Not Found";
    Response.StatusCode = 404;
    

    我在设置状态代码之前添加 Response.TrySkipIisCustomErrors=true 后发现,我会看到正常的页面复制并返回404 . 如果没有此行,将显示标准IIS 404页面 .

    或者,这可以在web.config中设置,如下所示:

    <system.webServer>
        <httpErrors existingResponse="PassThrough">
            // custom error page mappings
        </httpErrors>
    </system.webServer>
    

    这里的关键是 existingResponse="PassThrough"

    这已添加到IIS7,因此在以集成管道模式运行的站点上是必需的 .

    欲了解更多信息:http://msdn.microsoft.com/en-us/library/system.web.httpresponse.tryskipiiscustomerrors.aspx

    Update 更新澄清/更多信息,因为人们仍然觉得这很有用 . 值得注意的是,如果您需要一个简单的通用404页面,请使用web.config方法(最好使其成为纯HTML页面) .

    我描述的方法效果最好,如果你有一个动态或CMS驱动的网站,任何给定的页面可能会返回404,但你想显示你的访问者相关信息 .

    例如,特殊优惠页面(优惠/部分优惠)可以查找优惠(部分优惠),如果不存在则显示替代或相关优惠,同时在引擎盖下返回404 . 据访问者了解,他们刚刚被告知要约已不再可用,但他们仍然在优惠部分,但我们也告诉机器人取消索引网址 . 如果只有一个通用的404页面,那将会更加困难 .

  • 3

    您可以通过配置web.config文件来实现此目的 . 请查看下面的链接,该文章在页面底部解释了如何针对不同的HTTP错误状态显示不同的自定义错误页面 .

  • 2

    要使用 correct 404 状态代码显示 own page ,可以使用以下代码:

    1)在你的web.config中添加以下内容:

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

    和:

    <httpErrors errorMode="Custom">
      <remove statusCode="404"/>
      <error statusCode="404" path="404.htm" responseMode="File"/>
    </httpErrors>
    

    2)将404.htm文件添加到您网站的 root

    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
        <title>404 - Not Found</title>
        <meta http-equiv="refresh" content="5;url=/404-PAGE" />
      </head>
      <body>
           CONTENT
      </body>
    </html>
    

    您可以将内容添加到此文件的正文并删除META刷新,也可以只使用META刷新在CMS中打开页面 .

  • 13

    结合Jag和adt的答案,我仍然遇到了问题 . 当404由静态文件处理程序(而不是ASP.NET)处理时,我得到一个空白的响应 . (状态正确404.)

    要修复它,我必须将 errorMode="Custom" 添加到 <httpErrors> 元素 . 如果您的错误页面使用ASP.NET,则需要包含 responseMode="ExecuteURL" .

    <system.web>
        <customErrors mode="On" defaultRedirect="~/Error.aspx" redirectMode="ResponseRewrite" />
    </system.web>
    
    <system.webServer>
        <httpErrors errorMode="Custom">
            <remove statusCode="404" />
            <error statusCode="404" path="/Error.aspx" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
    
  • 0
    <httpErrors errorMode="Custom">
         <remove statusCode="404"/>
         <error statusCode="404" path="ErrorPages/error404.htm" responseMode="Redirect"/>
      </httpErrors>
    

    如果我不在路径属性中使用波浪号 (~) ,这对我有用

相关问题