1

在我的 web.config 中,我有:

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

然而,对于这些 URL,只有定义了文件扩展名的第二个有效,另一个返回蓝屏 404“应用程序中的服务器错误”。

http://127.0.0.1/scirranew/invalidpath

http://127.0.0.1/scirranew/invalidpath.aspx

有任何想法吗?我在 ASP.net 4、IIS 7.5 上。

4

4 回答 4

5

如果您想让它工作,您需要配置 IIS 以将所有请求传递给 .NET 引擎。您的第一个示例显然不是要求 .NET 页面,因此它没有路由到 .NET 引擎。

您使用的是什么版本的 IIS 和 .NET? 可能会有所帮助。

于 2011-07-01T20:38:26.570 回答
2

ASP.Net 仅被在 IIS 中注册的文件扩展名调用。因此,当您转到invalidpathIIS 时,会检查与该名称匹配的文件,然后是文件夹。如果两者都不存在,则调用 IIS 中指定的 404 页面。

根据您的 IIS 版本,您有几个不同的选项。在 IIS6 中,您必须从 IIS 管理器中手动设置 404 页面。在 IIS7 和更高版本中,您可以使用 web.config 并更改system.webServer部分: http ://www.iis.net/ConfigReference/system.webServer/httpErrors

于 2011-07-01T20:40:32.790 回答
2

我在同一个 web.config 中有 2 个配置

<system.web>
    <customErrors mode="On" defaultRedirect="/error.aspx" redirectMode="ResponseRedirect">
    </customErrors>
</system.web>

你也可以使用customErrors mode="RemoteOnly"

<system.webServer>
      <httpErrors errorMode="Custom">
          <remove statusCode="401" subStatusCode="-1" />
          <remove statusCode="403" subStatusCode="-1" />
          <remove statusCode="404" subStatusCode="-1" />
          <remove statusCode="500" subStatusCode="-1" />
          <error statusCode="401" path="/401.aspx" responseMode="ExecuteURL" />
          <error statusCode="403" path="/403.aspx" responseMode="ExecuteURL" />
          <error statusCode="404" path="/404.aspx" responseMode="ExecuteURL" />
          <error statusCode="500" path="/500.aspx" responseMode="ExecuteURL" />
      </httpErrors>
</system.webServer>

看看 path= " /404.aspx"与 path= "~/404.aspx"或 path= "404.aspx"的区别

于 2014-08-26T22:04:22.170 回答
1

另外,如果可能的话,我建议使用纯 html 页面作为错误页面,因为它们更可靠。例如,如果.net 会话存储不可用(例如会话数据库关闭),则错误页面将尝试无限期地重定向到错误页面!Html 页面对 .net 子系统的依赖较少,因此当事情开始失败时更有可能工作。

于 2012-07-17T11:03:09.757 回答