【问题标题】:Default redirect for Error 404错误 404 的默认重定向
【发布时间】:2011-05-27 21:33:58
【问题描述】:

我想在我的 ASP.net 网站中引入一个功能,只要在我的域上收到对未知 URL 的请求,用户就会被重定向到应用程序根目录中的我的 error_404.htm 页面。

例如,如果请求是http://www.mydomain.com/blahblahblah

然后,我希望它将请求重定向到http://www.mydomain.com/error_404.htm,而不是返回标准的404错误页面

更新 IIS 7.5 版和 .NET Framework 4 版

更新 /blah.aspx 重定向但 /blah 不重定向

【问题讨论】:

  • 哦,不,请不要。当我得到错误的 URL 时,我想知道。我还希望有机会编辑地址栏中的内容,以防我打错字。让错误页面提供一些有用的信息,但不要重定向。
  • 不要这样做。这令人难以置信的烦人。
  • 您运行的 .net 版本和 IIS 版本是什么?

标签: asp.net http redirect default


【解决方案1】:

它对我有用。我只是在标签<system.webServer> 之间包含这段代码:

 <httpErrors errorMode="Custom">
      <remove statusCode="404"/>
      <error statusCode="404" path="~/Erro/PaginaNaoEncontrada.aspx" responseMode="Redirect"/>
    </httpErrors>

【讨论】:

  • 是的,这已经是公认答案的一部分。您有什么新的想告诉我们的吗?
  • 略有不同:为什么是波浪号? (这甚至可以在 httpErrors 中使用吗?)
【解决方案2】:

在我的情况下,将“ResponseRewrite”更改为“ResponseRedirect”是可行的:

我的 MVC Webconfig 文件配置:

   <system.web>
      <compilation targetFramework="4.0" />
      <customErrors mode="On" redirectMode="ResponseRedirect">
         <error statusCode="404" redirect="~/Home/Login" />
      </customErrors>
   </system.web>
</configuration>

【讨论】:

    【解决方案3】:

    这是为 ASP.NET 和非 ASP.NET 请求配置自定义 404 错误页面的方式:

    <configuration>
    
       <system.web>
          <compilation targetFramework="4.0" />
    
          <customErrors mode="On" redirectMode="ResponseRewrite">
             <error statusCode="404" redirect="http404.aspx" />
          </customErrors>
       </system.web>
    
       <system.webServer>
          <httpErrors errorMode="Custom">
             <remove statusCode="404"/>
             <error statusCode="404" path="/http404.aspx" responseMode="ExecuteURL"/>
          </httpErrors>
       </system.webServer>
    
    </configuration>
    

    正如其他人已经指出的那样,您不应该使用 HTTP 重定向将用户发送到主页,这不仅会让用户感到困惑,也会让机器(例如搜索引擎)感到困惑。使用 404 状态码而不是 3xx 码很重要。

    您可以使用 HTML 上的元刷新来实现所需的功能:

    <%@ Page Language="C#" %>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
       <title>Not Found</title>
       <meta http-equiv="refresh" content="5;url=/"/>
    </head>
    <body>
       <h1>Not Found</h1>
       <p>Redirecting to Home...</p>
    </body>
    </html>
    

    【讨论】:

    • 是的,您的代码正在运行,但 &lt;error statusCode="404" path="/http404.aspx" responseMode="ExecuteURL"/&gt;' just shows a blank page insted of my error page. However i fixed it with ` 。我知道我违反了您的 3xx HTTp 代码建议
    • @Shekhar_Pro:根据iis.net/ConfigReference/system.webServer/httpErrors/error,如果您使用ExecuteURL responseMode,路径必须是“服务器相对URL”,这就是我使用/http404.aspx的原因,在您的情况下尝试/error.aspx,或者如果应用程序不在根目录下进行调整。
    • 我想我也有同样的问题。解释stackoverflow.com/questions/22144777/…
    • 我不明白这种方法对 seo 友好吗?搜索引擎如何知道这是 404 页面?我们是否必须在页眉中添加 404 元标记?以便搜索引擎知道没有找到该资源并且他们没有索引该页面?
    【解决方案4】:

    您可以通过在 web.config 中包含 customErrors 部分来将您的用户指向自定义 404。

    <customErrors mode="On" defaultRedirect="~/errors/GeneralError.aspx">
         <error statusCode="404" redirect="~/errors/PageNotFound.aspx" />
    </customErrors>
    

    正如其他人在上面的 cmets 中所说,将用户送回您的主页不仅会令人讨厌,而且在功能上也会令人困惑。

    我的建议是将用户引导到一个页面,该页面为他们提供了一些关于发生了什么的信息并为他们提供了下一步(浏览其他产品、返回您的仪表板等)。

    【讨论】:

    • 你确定你已经尝试过这个吗?也许您将模式设置为 RemoteOnly,在这种情况下,它只会向远程用户提供自定义错误页面。 (即不适合您本地)。
    • 我怀疑 /blah.aspx 重定向但 /blah 没有,@Shekhar_Pro 你能确认一下吗?
    • @Rippo 是的,情况就是这样,感谢您指出这一点。我仍然想知道它是否是 bbfb 而不是 bbfb.aspx
    • 好的,所以请在您的帖子中回答我关于 iis 版本和 .net 版本的评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2018-05-09
    • 2017-05-10
    相关资源
    最近更新 更多