【问题标题】:How to return 'own' 404 custom page?如何返回“自己的”404 自定义页面?
【发布时间】:2012-04-24 09:35:08
【问题描述】:

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

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

该页面有代码:

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

    Response.StatusCode = 404;
}

如果我在本地主机上工作,那么连同为页面返回的 404 状态,页面显示“正确的错误描述”。

一旦我将相同的代码发布到互联网上,所有有错误的页面仍然显示 404 状态代码,但没有内容。相反,它们有标准的 404 错误消息:

404 - 找不到文件或目录。

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

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

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

附: ASP.NET 4.0

【问题讨论】:

  • 我一直以同样的方式完成自定义 404 页面。 1) 转移到错误页面 2) 用户友好的页面副本和机器人引擎盖下的 404。我现在正在尝试执行此操作的一个站点我遇到了完全相同的问题 - 如果我添加“Response.Status”,则会显示标准 404 - 删除 response.status 并且页面副本出现但返回 200。我未受过教育的猜测是 .NET4 框架发生了一些变化......

标签: asp.net http-status-code-404


【解决方案1】:
<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

【讨论】:

  • 虽然完全正确,但如果可能,我建议不要将 ASPX 用于错误页面。如果错误与 ASP 引擎中的某些内容有关,则错误页面也可能无法加载。..
  • 我同意@justabuzz,我们实际上有一个应用程序曾经发生过这种情况 - “此外,ASP .NET 在尝试显示异常的自定义错误页面时遇到错误”
  • 我认为 404 的 aspx 页面是可以的,因为如果它出错,它可能会显示 500 页面。但如果那是一个 aspx 页面...
  • 不适用于 xxx.xom/wrongfolder,我得到 404 - File or directory not found. The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.
【解决方案2】:

哈哈!

试试这个:

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

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

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

例如,特价商品页面 (offers/some-offer) 可以查找商品 (some-offer),如果它不存在,则在返回 404 时显示替代或相关商品。据访问者所知,他们刚刚被告知该优惠不再可用,但他们仍在优惠部分,但我们还告诉机器人取消对 URL 的索引。 如果只有一个通用 404 页面,这将更难做到。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      要使用正确的 404 状态码显示您的自己的页面,您可以使用以下代码:

      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 中打开一个页面。

      【讨论】:

        【解决方案5】:

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

        要修复它,我必须将 errorMode="Custom" 添加到 &lt;httpErrors&gt; 元素。如果您的错误页面使用 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>
        

        【讨论】:

          【解决方案6】:
          <httpErrors errorMode="Custom">
               <remove statusCode="404"/>
               <error statusCode="404" path="ErrorPages/error404.htm" responseMode="Redirect"/>
            </httpErrors>
          

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

          【讨论】:

            【解决方案7】:

            要在 asp.net C# 中创建和访问 404 页面,请按照以下步骤操作:

            1)创建一个 404.html 文件并添加您的内容

            
              404 - 未找到
                  身体 {
              颜色:#797979;
              背景:#eaeaea;
              字体系列:'Ruda',无衬线;
              填充:0px!重要;
              边距:0px!重要;
              字体大小:13px;
            }
                  .p404 图像 {
              边距顶部:120px;
            }
                  . 居中 {
              文本对齐:居中;
            }
                  .p404 h1 {
              字体粗细:900;
            }
              
            
            
              

            不要惊慌!!

            您要查找的页面不存在。


            正文>
            猜你喜欢
            • 1970-01-01
            • 2018-12-26
            • 2014-01-30
            • 2013-06-25
            • 1970-01-01
            • 2018-11-16
            • 1970-01-01
            • 2011-01-01
            相关资源
            最近更新 更多