ASP.NET/IIS:所有文件类型都返回404错误

5

我在web.config中设置了404处理程序页面,但仅当URL的扩展名为.aspx(或其他由ASP.NET处理的扩展名)时才起作用。 我知道我可以在网站选项中设置静态HTML页面,但我想要一个页面。 有没有办法在IIS中为所有请求扩展名分配ASPX处理程序页面?

7个回答

11
直接的问题是是否有选项将ASPX处理程序分配给所有请求扩展名:是的,有。我将很快讨论如何做到这一点。
首先,我认为“隐藏”的问题 - 你真正想要的答案 - 是否存在一种方法来重定向除ASPX,ASMX等之外的所有页面的所有404错误。是的,有的,而且如果它能解决你遇到的问题,这是更好的选择。
要在IIS 6中重定向所有404,请右键单击Web应用程序根(无论是自己的站点还是主站点中的虚拟目录),然后选择“属性”。从那里选择“自定义错误”选项卡。在列表中找到404,并将其更改为所需的重定向。
现在,如果那不能满足 - 我真的希望它能 - 是的,你可以通过ASPX处理程序运行每个页面。但是,这样做的成本相当高,会影响效率-原始HTML /图像服务比任何动态内容都要快得多。
要做到这一点,请右键单击Web应用程序根,并选择“属性”。选择“主目录”选项卡。单击“配置”;将弹出一个新窗口。复制一个ASP.NET页面服务器的路径,然后将其用于通配符应用程序映射。
请记住,再次强调,这通常是错误的答案。它会对性能产生负面影响,并等同于用链锯雕刻火鸡。如果可能,我强烈推荐第一种选项。

非常感谢您提供完整的答案。我们将进行性能测试,并决定选择哪个。 - st78

2

重要提示:

IIS7带来了几项非常好的功能之一,它将所有页面通过处理程序路由,因此您可以自定义404和有用的目录和文件级安全性(基于与IIS7之前的asp.net文件相同的web.config信息)。因此,理论上,“使用II7”是一个答案(在未来将成为“答案”),但如果您没有在W2k8(或更高版本)上托管/被托管,则它并不实用。


1

web.config 只能为其网站控制的页面设置错误页。如果您有任何其他超出 ASP.Net 应用程序范围的页面,则需要在 IIS 中为它们设置处理方式。在那里有一个选项可以配置 404 页面,您可以将其指向您的自定义页面。


1

我能想到的另一件事就是将所有扩展名都传递给asp.net。

这样,所有类型的文件都将由asp.net处理,您的自定义错误页面也会起作用。


1
它可以工作,但对于高流量站点存在性能考虑。 - Joel Coehoorn

1
在IIS应用程序配置中,您可以将通配符映射(".*")设置为C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll

0
在IIS中,您可以为404错误设置自定义错误,并将其指向站点属性中的URL。
默认情况下,它会显示一个静态的html文件 C:\WINDOWS\help\iisHelp\common\404b.htm
您可以将其更改为站点上的相对URL。

0
  1. 您可以在IIS中设置通配符映射(应用程序配置/映射/通配符映射/-只需将aspnet_isapi.dll设置为可执行文件并取消选中“验证文件是否存在”框),这将路由所有传入的请求到您的应用程序-因此您可以直接从中控制行为。

  2. 您不必在IIS应用程序设置中设置静态页面。在我的看法中,您应该能够从您的应用程序中设置有效的URL(例如/error_handler.aspx),以便在特定服务器错误的情况下用作着陆页。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接