我正在尝试在 IIS6 中配置自定义错误。
我选择 404 错误,将下拉菜单设置为“URL”,然后将其输入为 URL“/404.aspx”
什么时候去:
http://mysite.com/no-page-here
它找到 404.aspx,但不将其作为 .Net 页面处理——它尝试将源作为 XML 文件提供,然后由于无法解析而失败。
404 在 .Net 页面上运行良好,因为我在 web.config 的 CustomErrors 元素中设置了它。但是对于非 .Net 资源,我必须使用 IIS 错误,并且它拒绝仅重定向到 404 页面。本质上,它试图为它提供源代码。
您是否在 IIS6 中启用了正确的扩展?在 IIS 管理器中,转到 Web 扩展(通常是左侧导航树中的最后一项)并确保启用所有适当的扩展(通常是 .NET)。否则,这正是将要发生的事情。
您是否尝试过输入完整的 URL 而不仅仅是“/”?我认为当您选择“文件”而不是 URL 时会发生这种行为,但也许如果它是本地 URL,它也会绕过 ASP.Net 工作进程。
听起来您的错误文件本身存在错误。如果您浏览到该文件,它是否得到了正确的服务,或者您是否得到相同的症状?
我认为您不能将动态页面用作 404。如果我没记错的话,它必须是静态页面。我想您可以使用 meta 或 JS 从那里重定向到动态页面,尽管这不是“标准”
这篇Technet 文章说要确保选择 URL,否则有返回页面源代码的风险。
本文介绍了如何使用 global.asax 文件来捕获所有应用程序错误,包括 404。
Global.asax 需要:
您想要的是,将下拉列表设置为 URL,然后输入“/sitename/404.aspx”,其中 sitename 是网站的根目录。
它真的就像你设置了“文件”而不是“URL”——但你没有。当您在浏览器中插入整个 404 URL 时会发生什么?如果可行,作为解决方法,您可以尝试插入完整的 URL,而不是
/404.aspx
:您提到这是客户的服务器。确保没有两个网站指向同一个物理目录,并且您正在编辑错误的网站。还有更多并确保该网站被标记为应用程序。
从您尝试使用 web.config 指向 .NET 错误页面的声音来看。这仅适用于 .Net 页面。如果您混合使用经典 ASP 和 .Net,则必须将 IIS 错误设置为指向您想要的文件。为此,您必须直接访问服务器。或者在你的 Global.asa 中写一些东西来重定向错误。
至少这就是我一直不得不这样做的方式。
编辑:现在我正在考虑更多并在我的本地主机上做了一些挖掘,看起来你不能将自定义错误指向.Net页面。它似乎没有使用 ASP.NET 来处理那些当然需要呈现它的页面。您将需要使用 HTML 页面,并可能从那里重定向。