ASP.NET/IIS:所有文件类型为 404
Posted
技术标签:
【中文标题】ASP.NET/IIS:所有文件类型为 404【英文标题】:ASP.NET/IIS: 404 for all file types 【发布时间】:2010-09-13 02:10:55 【问题描述】:我在 web.config 中设置了 404 处理程序页面,但它仅在 URL 的扩展名是 .aspx(或由 ASP.NET 处理的其他文件)时才有效。 我知道我可以在网站选项中设置静态 html 页面,但我想要一个页面。 是否有任何选项可以为 IIS 中的所有请求扩展分配 ASPX 处理程序页面?
【问题讨论】:
【参考方案1】:直接的问题是是否有将 ASPX 处理程序分配给所有请求扩展的选项:是的,有。我将很快讨论如何做到这一点。
首先,我认为“隐藏”的问题——你真正想要的答案——是是否有办法重定向除 ASPX、ASMX 等以外的页面的所有 404 错误。是的,有,而且这个如果它能解决您遇到的问题,是更好的选择。
要在 IIS 6 中重定向所有 404,请右键单击您的 Web 应用程序根目录(无论是它自己的站点还是主站点中的虚拟目录),然后选择“属性”。从那里,选择“自定义错误”选项卡。在列表中找到404,改成你想要的重定向。
现在,如果这还不够——我真的希望如此——是的,您可以通过 ASPX 处理程序运行每个页面。但是,这样做会带来相当高的效率成本——原始 HTML/图像服务比任何动态服务都要快得多。
为此,请右键单击您的 Web 应用程序根并选择“属性”。选择“主目录”选项卡。点击“配置;”将弹出一个新窗口。从 ASP.NET 页面服务之一复制路径,然后将其用于通配符应用程序映射。
请记住,大多数时候这是错误答案。它会对您的表现产生负面影响,相当于使用电锯雕刻火鸡。我强烈推荐第一个选项而不是这个选项,如果它适合你的话。
【讨论】:
感谢您的完整回答。我们将测试性能并决定选择哪一个。【参考方案2】:有关信息:
这是 IIS7 带来的几个好处之一 - 所有页面都通过处理程序进行路由,这样您就可以执行自定义 404 并且 - 非常有用 - any 文件的目录和文件级别安全性(基于在与 IIS7 之前的 asp.net 文件相同的 web.config 内容上)。
所以理论上“使用 II7”是一个答案(将及时成为“那个”答案) - 但如果您不是在 W2k8(或更高版本)上托管/托管,它当然不是一个非常实用的答案。
【讨论】:
【参考方案3】:web.config 只能为其网站控制的页面设置错误页面。如果您有 ASP.Net 应用程序范围之外的任何其他页面,那么您可以在 IIS 中为它们设置处理。那里有一个用于配置 404 页面的选项,您可以将其指向您的自定义页面。
【讨论】:
【参考方案4】:我能想到的唯一另一件事是将所有扩展传递给 asp.net。
这样,所有类型的文件都由 asp.net 处理,您的自定义错误页面将正常工作。
【讨论】:
它可以工作,但对于高流量网站有性能方面的考虑。【参考方案5】:在 IIS 应用程序配置中,可以设置通配符映射(“.*”)到 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
【讨论】:
【参考方案6】:您可以在 IIS 中设置通配符映射(应用程序配置/映射/通配符映射/ - 只需将 aspnet_isapi.dll 设置为可执行文件并取消选中验证文件是否存在框),这会将所有传入请求路由到您的应用程序 -因此您可以直接从中控制行为。
您不必在 IIS 应用程序设置中设置静态页面。恕我直言,您应该能够从您的应用程序中设置有效的 url(例如 /error_handler.aspx),以防出现特定的服务器错误。
【讨论】:
【参考方案7】:在 IIS 中,您可以为 404 错误设置自定义错误并将其定向到站点属性中的 URL。
默认显示静态html C:\WINDOWS\help\iisHelp\common\404b.htm
您可以将其更改为您网站上的相对网址。
【讨论】:
以上是关于ASP.NET/IIS:所有文件类型为 404的主要内容,如果未能解决你的问题,请参考以下文章
让 ASP.NET / IIS 不缓存 PDF 文件的正确方法