我们正在将一些经典ASP网站从IIS6框迁移到运行IIS7的新Server 2008框。
我们已经完成了有关自定义错误的学习过程,现在这些工作正常,Server.GetLastError正在运行。
我们正在迁移的网站使用定制的CMS,该CMS利用自定义的404.asp错误页面从数据库中提取内容,具体取决于URL。这也是完美的。
但是,当2合并时(例如,我们在通过自定义404页面运行的页面上有500错误),我们会收到一个完全空白的页面。没有错误,没有任何信息。只是一个纯白页。
示例1:http://snavebelac.com/thisdoesnotexist会生成自定义404页面 示例2:http://snavebelac.com/st-test空白页。这在自定义404页面中有故意500错误。
我认为因为它正在运行自定义的404.asp错误页面,这会以某种方式阻止自定义500错误页面运行。
有没有人知道我怎么能够配置服务器以便自定义404页面触发但是在IIS6中输出500个错误或者是否有一种方法可以配置服务器以将自定义404处理为以及定制500?
提前致谢。
答案 0 :(得分:0)
您必须配置web.config以处理500个状态错误,如下所示:
<system.web>
<customErrors mode="On" defaultRedirect="frmError.aspx">
<error statusCode="404" redirect="frmNotFound.aspx" />
<error statusCode="500" redirect="frmError.aspx" />
</customErrors>
</system.web>
请注意第四行代码,其中您说自从您收到500错误后必须调用女巫页面。
答案 1 :(得分:0)
查看此处发布的解决方案 - How can I properly handle 404 in ASP.NET MVC?
关键是 -
Response.TrySkipIisCustomErrors = true;
答案 2 :(得分:0)
我遇到了类似的问题,解决方案非常奇怪,但确实有效。
我会非常务实,请执行以下操作。
<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" existingResponse="Auto">
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" subStatusCode="100" prefixLanguageFilePath="" path="/500.100.asp" responseMode="ExecuteURL" />
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/404.asp" responseMode="ExecuteURL" />
</httpErrors>
如果您确保以空白页结尾:
,则空白页将为“非空白”Response.Flush()
当IIS执行/500.100.asp中的代码时,它不会刷新响应,而是以空白页结束。 我保证在IIS7.5 / IIS8和Classic ASP中可以实现“404”和“500.100”自定义错误;)