繁体   English   中英

IIS覆盖ASP.NET中的自定义404错误页面

[英]IIS overriding custom 404 error page in ASP.NET

我正在尝试创建一个404错误页面,目前我已经拥有以下所有内容/尝试了以下所有内容来尝试完成此操作。 当用户输入时:

HTTP://name/something.aspx

它的工作方式与其应有的一样。 但是如果用户键入:

HTTP://名称/ NotAFile

没有.aspx然后IIS7自己掌握了问题,我得到了IIS7附带的可爱错误页面。 目标是网站仅重定向404状态代码(因此不是200或302重定向)。 我在web配置中尝试过:

<customErrors mode="On" defaultRedirect="~/error/Default.aspx redirectMode="ResponseRewrite">
     <error statusCode="404" redirect="~/error/NotFound.aspx" />
</customErrors>

这适用于具有.aspx文件扩展名的URL,但不适用于没有扩展名的URL。 与global.asax中的这种方法相同

void Application_Error(object sender, EventArgs e)
{
    var serverError = Server.GetLastError() as HttpException;

    if (serverError != null)
    {
        if (serverError.GetHttpCode() == 404)
        {
            Server.ClearError();
            Server.Transfer("~/error/NotFound.aspx");
        }

        Server.Transfer("~/error/Default.aspx");
    }
}

对此有相同的结果:(我最后的尝试是将此应用于Web配置:

<system.webServer>
    <httpErrors existingResponse="PassThrough" />
</system.webServer>

有了这个我只是得到一个没有任何东西的纯白色屏幕...任何想法或评论将不胜感激! 提前致谢!

以下代码适用于.aspx和其他文件类型:

Global.asax中

void Application_Error(object sender, EventArgs e)
{
    var serverError = Server.GetLastError() as HttpException;
    if (serverError != null)
    {
        if (serverError.GetHttpCode() == 404)
        {
            Server.ClearError();
            Response.Redirect("~/NotFound.aspx?URL=" + Request.Url.ToString());
        }
        Response.Redirect("~/Default.aspx");
    }
}

Web.config文件

<system.webServer>
    <httpErrors existingResponse="PassThrough" />
</system.webServer>

您的应用程序似乎在经典管道模式下运行。 将其更改为集成,您的问题将得到解决。 这是一篇关于管道模式及其差异的文章 - http://learn.iis.net/page.aspx/508/wildcard-script-mapping-and-iis-7-integrated-pipeline/

<system.webServer >
    <httpErrors errorMode="Custom">
      <remove statusCode="404" subStatusCode="-1" />
       <error statusCode="404" path="http://www.seair.co.in/Page-not-found.aspx" responseMode="Redirect" />
    </httpErrors>
</system.webServer>

使用配置中的代码并提供错误页面的完整路径

对于经典的asp,你可以使用它

<system.webServer>
    <httpErrors>
      <clear />
      <error statusCode="404" subStatusCode="-1" path="/404.html" responseMode="ExecuteURL" />
    </httpErrors>
  </system.webServer>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM