11

在我在共享主机提供商中发布的 ASP.NET 3.5 网站中,我已经像这样配置了我的 web.config 文件:

    <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="403" redirect="AccessDenied.htm"/>
        <error statusCode="404" redirect="FileNotFound.htm"/>
    </customErrors>

如果用户请求的页面不存在(例如“www.example.com/NotExistPage.aspx”),用户将被重定向到我们预期的 FileNotFound.htm 页面。

但是,如果用户请求一些地址,例如:“www.example.com/NotExistDirectory”,而没有 .aspx 扩展名,用户将遇到 IIS 7.5 错误页面:

HTTP 错误 404.0 - 未找到 您要查找的资源已被删除、名称已更改或暂时不可用。

详细错误信息:

Module  IIS Web Core
Notification    MapRequestHandler
Handler StaticFile
Error Code  0x80070002

Requested URL   http://www.example.com:80/NotExistDirectory
Physical Path   D:\Websites\example\example.com\wwwroot\NotExistDirectory
Logon Method    Anonymous
Logon User  Anonymous

这是一个不友好的黄页,我们没想到。

我想知道在 webconfig 中设置 customeError 是否不支持这种类型的地址?我怎样才能防止用户看到这个黄页。

编辑: 感谢大卫的回答,但我找到了实际原因和正确的解决方案。请看我的回答。

4

5 回答 5

12

@Mostafa:我遇到了完全相同的问题。我发现可以通过将以下内容添加到 web.config 文件来解决它:

<system.webServer>
    <httpErrors errorMode="Custom">
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="404" subStatusCode="-1" prefixLanguageFilePath="" path="/MyErrorPage.aspx" responseMode="ExecuteURL" />
    </httpErrors>
  </system.webServer>
于 2012-02-01T12:23:04.457 回答
4

这很有趣,几年后我突然发现问题出在哪里。

感谢@David的解决方案,但原因和完整的解决方案如下:

通过将customErrors模式设置为“ On”,仅当我们在 ASP.NET 应用程序中遇到异常时才有效,而当我们尝试访问nonExistingdirectoryOrnotExsitingStaticResouce时,IIS 会呈现 404 错误并且它不会到达 asp.net 运行时并由 IIS 直接提供服务。

所以我们需要在 Web.config 中为 IIS 添加如下配置:

  <system.webServer>
    <httpErrors errorMode="Custom">
      <remove statusCode="404"/>
      <error statusCode="404" path="~/404.html" responseMode="File" />
    </httpErrors>
  <system.webServer>

设置responseMode为“ File”很重要,否则状态码会自动从 404 更改为 200 。所以从客户端的角度来看,他们没有得到实际的 404 状态码。

于 2017-06-29T12:12:37.740 回答
1

这是因为 ASP.Net 模块被配置为处理某些文件扩展名。IIS 确定 .aspx 必须由 ASP.Net 模块处理,然后 web.config 中的 customerrors 部分(实际上是 web.config 本身)启动。

由于您请求了一个甚至没有为 ASP.Net 配置的页面,因此 IIS 会自行处理它而不传递请求。

于 2010-12-20T08:15:17.003 回答
0

对于 .aspx 以外的任何其他文件,您可以在 IIS 中进行配置: http ://www.xefteri.com/articles/show.cfm?id=11

于 2010-12-20T08:31:05.427 回答
0

首先,目录 url 必须带有斜杠,否则它只是一个无扩展名的文件。www.mysite.com/NotExistDirectory/
其次,ASP.net IIS 模块仅用于处理 ASP MIME 类型,因此目录是留给 Web 服务器的。第三,customerror 是 system.web 的一部分,是 ASP.net 配置的
一部分,httperror 是 system.webserver 的一部分,是 IIS 配置的一部分。
假设 IIS 配置中的 http 模块默认值 httperror 将适用于不存在目录的自定义错误。

于 2013-01-10T16:58:17.540 回答