Coldfusion错误和IIS7.5错误页面

Ben*_*enz 9 coldfusion iis-7.5

为了允许ColdFusion显示其错误而不仅仅是服务器错误(代码500),我已根据本网站的一些调查结果添加到web.config中.

问题看起来已经解决但......

当我访问IIS中的一个不存在的目录时,它返回一个没有任何状态代码的"空白"页面.如果我将它从passthrough设置回auto,IIS将再次获取错误页面,并且不再显示ColdFusion错误.

有人有解决方案吗?我做了一些研究并"怀疑"JWildcardhandler可能是问题,但我找不到解决方案.

非常感激!

Jor*_*ter 22

如果有人想知道这个人的网络配置可能看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors existingResponse="PassThrough" />
        ...
    </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

在早期版本的IIS中,如果您的自定义脚本返回了错误代码,则IIS会忽略它并让它通过.您也可以将其设置为使用自定义脚本处理错误状态.

在我的旧服务器上,如果给定的URL是404,则IIS被设置为执行/404.cfm,其显示错误页面并使用返回404状态代码<cfheader>.

但是,现在如果该脚本返回404状态代码,则最终结果是IIS返回服务器错误,而不是返回带有404状态代码的响应.

避免这种情况的唯一方法是使用existingResponse="PassThrough"然后使用CFAdmin中设置的站点范围"模板未找到"模板.

这是有趣的部分.我将index.cfm设置为我的站点的默认索引和唯一的默认索引.

如果我去/about/,并且/about/index.cfm存在,那么它呈现页面,就好像我已经要求它一样/about/index.cfm.如果我去/about/index.cfm/about/index.cfm存在,它执行站点范围内的404模板.

但是,如果我去/about//about/不存在作为一个URL,它并没有试图加载/about/index.cfm,从而引发站点范围内的404模板.相反,它呈现一个空白页面!

据我所知,这个问题没有可行的解决办法.看起来只有用.Net编写的人才能解决这个问题,因为他们可以在他们生成的响应中放置一个标志,字面上告诉IIS"忽略状态代码".我认为微软根本不支持备用Web应用程序.

基本上,这是解决方案: 摆脱existingResponse="PassThrough"并返回错误的状态代码.

其他任何事情都难以实施.请注意,如果您正在制作RESTful应用程序或API,则此方法无效.在这种情况下,你必须创建只是一个虚拟目录,以便您可以指定一个自定义的web.config文件,其确实使用existingResponse="PassThrough".但是,如果您需要能够允许自定义错误处理和自定义404处理,那么您将被有效地搞砸.

好消息是,除了API和Ajax之外,当他们正在查看你的标题时,唯一有人会关心状态代码实际是什么,在这种情况下,他们会看到你正在运行IIS而且只是为你感到难过