Coldfusion错误和IIS7.5错误页面

时间:2011-02-11 10:37:06

标签: coldfusion iis-7.5

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

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

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

任何人都有解决方案吗?我做了一些研究并“怀疑”JWildcardhandler可能是问题,但我找不到解决方案。

非常感谢!

2 个答案:

答案 0 :(得分:22)

如果有人想知道这个人的网络配置可能是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors existingResponse="PassThrough" />
        ...
    </system.webServer>
</configuration>

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

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

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

避免这种情况的唯一方法是使用<cfheader>,然后使用在CFAdmin中设置的网站范围的“找不到模板”模板。

这是有趣的部分。我将index.cfm设置为默认索引,并将默认索引设置为我的网站。

如果我转到existingResponse="PassThrough",并且/about/存在,那么它会呈现该页面,就好像我曾要求它/about/index.cfm一样。 如果我转到/about/index.cfm/about/index.cfm ,则会执行网站范围的404模板。

如果我转到/about/index.cfm/about/不存在为网址,则尝试加载/about/,从而触发网站范围的404模板。相反,它呈现一个空白页面!

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

基本上,这是解决方案: 摆脱/about/index.cfm并返回错误的状态代码

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

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

答案 1 :(得分:4)

保持传递到位,您可以使用重写来处理空白页:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /404.cfm [NC,L,NS]

重写基本上意味着 - 如果文件和目录不存在,则重定向到“404.cfm。还在404.cfm页面上包含404 cfheader。