Web.config - 自定义错误页面无效

时间:2015-05-26 20:02:00

标签: asp.net .net iis

我已尝试过以下内容(并尝试使用已注释掉的未注释),但只会出错:

  

您要查找的资源已被删除,名称已有   已更改,或暂时无法使用。

在已发布网站项目的web.config中:

  <system.webServer>
    <httpErrors errorMode="Custom"  existingResponse="Replace">
      <remove statusCode="404"/>
      <!--<error statusCode="404" responseMode="File" path="\Error\404.htm"/>-->
      <error statusCode="404" responseMode="ExecuteURL" path="http://example.com/Error/404.htm"/>
    </httpErrors>
  </system.webServer>

我通过将浏览器中的网址从.../default.aspx(这很好)更改为.../abc.aspx来尝试。

这是重定向到错误页面的正确方法,还是有错误?

修改

我发现如果我尝试http://example.com/nonExistingPage - 重定向到错误页面。但不是来自http://example.com/Folder/nonExistingPage

编辑2

通过指定example.com之后的路径可以部分解决问题。但是 - 该网站已发布到example.com/subfolder,当有人导航到example.com/nonExistingFolder时,系统不会显示自定义错误页面。

1 个答案:

答案 0 :(得分:8)

web.config中尝试此操作(包括500错误支持):

<configuration>
    ...
    <system.web>
        ...
        <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Error/500.htm">
            <error statusCode="404" redirect="~/Error/404.htm" />
            <error statusCode="500" redirect="~/Error/500.htm" />
        </customErrors>
        ...
    </system.web>
    ...
    <system.webServer>
        ...
        <httpErrors errorMode="Custom">
            <remove statusCode="404" />
            <error statusCode="404" path="/Error/404.htm" responseMode="ExecuteURL" prefixLanguageFilePath="" />
            <remove statusCode="500" />
            <error statusCode="500" path="/Error/500.htm" responseMode="ExecuteURL" prefixLanguageFilePath="" />
        </httpErrors>
        ...
     </system.webServer>
     ...
</configuration>

我还建议使用.aspx页而不是.htm,以便确保在响应标头中设置正确的状态代码。

<%@ Page Language="C#" %>

<% Response.StatusCode = 404; %>

<!DOCTYPE html>
<html>
<head runat="server">
    <title>404 Not Found</title>
</head>
<body>
    404 Error
</body>
</html>