2013-05-06 31 views
5

在我web.config文件我已经指定了一些自定义错误:自定义错误页不涵盖所有URL路径

<customErrors mode="RemoteOnly" defaultRedirect="~/Error"> 
    <error statusCode="500" redirect="~/Error" /> 
    <error statusCode="404" redirect="~/NotFound" /> 
</customErrors> 

现在,一些环节,如http://mysite.com/dsflhsdff将被重新导向至mysite.com/notfound。但一些链接,如https://mysite.com/videoconference/0/0/0由服务器本身处理 - 而不是我的自定义错误页面,我得到IIS错误页面(找不到文件或目录)。在例如这个链接 - https://scyk.pl/forums/0/0/0将产生适当的404错误(我的自定义错误页面)。

这里发生了什么?我是否需要手动设置IIS自定义错误?如果是这样,我该怎么做?

回答

0

如果页面调用不通过asp.net引擎,那么是的是由IIS处理。

您可以这样做setup very easy if you have direct access to the iis,但IIS可让您选择设置此自定义错误,也可直接从您的网站的web.config中设置。下面是404错误的例子:

<system.webServer> 
    <httpErrors> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" prefixLanguageFilePath="" path="/PageNotFound.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 
</system.webServer> 

更多信息在:http://www.iis.net/configreference/system.webserver/httperrors

1

这是因为ASP.NET甚至从未知道有一直为.htm页的请求。 IIS将自行处理.htm页面,而不涉及ASP.NET。

你可以得到你的自定义页面在以下两种方式之一显示:

获取ASP.NET处理的.htm页:在IIS中右击你的网站/虚拟目录 - >属性 - >主目录/虚拟目录选项卡 - >“配置”按钮下的“应用程序设置”部分 - >添加映射。 为IIS设置自定义错误页面:在IIS中右键点击您的网站/虚拟目录 - >属性 - >自定义错误标签 - >将404错误设置为页面错误页面。

1

您也可以处理此错误在Global.asax文件中的Application_Error方法

例如

void Application_Error(object sender, EventArgs e) 
    { 
     // Code that runs when an unhandled error occurs 
     Exception exc = Server.GetLastError(); 

     // Handle HTTP errors 
     if (exc.GetType() == typeof(HttpException)) 
     { 
      // The Complete Error Handling Example generates 
      // some errors using URLs with "NoCatch" in them; 
      // ignore these here to simulate what would happen 
      // if a global.asax handler were not implemented. 
      /*if (exc.Message.Contains("NoCatch") || exc.Message.Contains("maxUrlLength")) 
       return;*/ 

      //Redirect HTTP errors to HttpError page 
      /*Server.Transfer("HttpErrorPage.aspx");*/ 
     } 
    } 

更多信息: http://www.asp.net/web-forms/tutorials/aspnet-45/getting-started-with-aspnet-45-web-forms/aspnet-error-handling

0

这是发生,因为IIS是无法找到在某些情况下,您的自定义错误页。这发生在我的某些扩展上,但通过在IIS管理器的错误页面部分中配置自定义错误页面,我每次都能够打开自定义错误页面。

继承人如何做到这一点:

进入您的IIS管理器,然后选择有问题的网站,找到有权根据IIS部分“错误页面”的图标。

双击图标后,您将看到状态码列表以及相应的文件负责提供错误。

找到错误代码,在你的情况下404(如果它不存在,你可以通过点击'Add ...'从右侧菜单中添加它),然后点击'Edit ...'按钮在右侧菜单中。

接下来,单击您已出现的对话框中的'在此站点上执行URL'单选按钮。以下是您提供用户将被重定向到的相对URL的位置。

你已经完成了编辑对话框中的选项后,你会想选择在主错误页面痛你的网页再次,只是这一次点击“编辑功能设置...”

在您提供的编辑错误页面设置,请确保选中“本地请求的详细错误和远程请求的自定义错误页面”。还要确保您在之前的编辑菜单中输入的页面被输入到编辑错误页面对话框的默认页面部分的路径字段中。最后,路径类型必须设置为'执行URL'