IIS 404自定义错误

我已经将ASP.NET 3.5应用程序部署到64位Windows 2003 R2服务器。

在web.config中我有以下

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

在IISpipe理器的网站属性中,我将404和500错误设置为Type =“URL”和与web.config中相同的URL。

我有一个通配符应用程序映射到.NET 2.0 aspnet_isapi.dllclosures“validation文件存在”。

如果我试图打一个假的.aspx文件,我成功地发送到404页面。 我相信这是因为有一个明确的.aspx映射到.NET DLL。

如果我试图访问一个虚假的目录,我只是收到一个纯文本回应说:

该系统找不到指定的文件。

看起来,这些对目录的请求不是通过.NETpipe道进行路由,这是我期望(和需要)发生的,因为通配符应用程序映射。

有任何想法吗?

为了testing你的逻辑,我实际上走完了整个过程。 我使用ETW跟踪IIS和ASP.NET以及Process Monitor来查看发生了什么事情。 这是我发现的:

  1. 当您添加“通配符映射”为aspnet_isapi.dll与“validation文件存在”取消选中,所有请求实际上通过.netpipe道
  2. 当你访问一个虚假的目录,.net实际上查找所有.config文件..即machine.config,根web.config(这是在C:\ WINDOWS \ Microsoft.NET \框架\ v2.0.50727 \ CONFIG)和您的Web网站根目录寻找一个可以处理你的请求的HttpHandler
  3. 由于没有处理程序被configuration为处理“目录”请求,请求返回到IISGeneral: GENERAL_STATIC_FILE_HANDLER和失败, 0x80070002即FILENOTFOUND
  4. 由于您将IIS自定义错误404configuration为/ 404 /,因此它将查找目录c:\ inetpub \ wwwroot \ 404 \,与另一个0x80070002失败并发送通用The system cannot find the file specified. 错误。
  5. 当你访问一个假的main.aspx页面,.aspx请求在根web.config文件中被处理,因此你会看到.net特定的(无法find该资源)错误。
  6. 现在,当您选中“validation该文件是否存在”为“通配符映射”时,服务器会在将扩展映射到应用程序之前检查请求的脚本是否存在
  7. 因此,这个请求永远不会通过.netpipe道传递给你,如第4点所述。

希望这可以帮助。

对于IIS 5.0,开心的是:

属性>首页Directroy>高级configuration:select你感兴趣的文件扩展名,并选中“validation文件存在”checkbox。

如果你没有打开“validation文件”的通配符映射,它会发送请求到你的DLL。 如果您将它映射到的ASP.Net 2.0 DLL没有为您的应用程序使用web.config(您提到的是.net 3.5),那么它将返回一个通用的错误。 如果启用“validation文件存在”选项,IIS将会看到该文件夹​​不存在,并使用其内部错误设置(您所说的与web.config中的内容相同)。 也许尝试打开这个选项,看看是否有助于你的情况。