IIS 8/8.5与ColdFusion 10/11出现500错误

7
如果我的ColdFusion脚本出现错误,我从IIS收到的是500错误消息而不是ColdFusion。仅当我在URL中提供文件名时才会发生此问题,如果我打开没有脚本名称的URL(将打开index.cfm),则不会发生此问题。
例如:
- IIS错误:http://www.example.com/index.cfm - IIS错误:http://www.example.com/foobar.cfm - Coldfusion错误:http://www.example.com/ 我可以在我的三个ColdFusion平台中的其中两个上重现此问题:
- 工作:IIS 7.5和ColdFusion 10 Update 12(带更新的连接器) - 无法工作:IIS 8和ColdFusion 10 Update 12(带更新的连接器) - 无法工作:IIS 8.5和ColdFusion 11
我的index.cfm和foobar.cfm:
<!--- provoke a coldfusion error --->
<cfset foo

我的web.config文件:

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

对我来说,看起来ColdFusion连接器在IIS 8和IIS 8.5上存在问题。


你在应用程序日志中看到了什么吗? - Fish Below the Ice
是的,我可以找到我所引发的 ColdFusion 错误。ColdFusion 抛出了正确的错误,但 IIS 忽略了它。 - android
1个回答

6

好的,我终于能够修复这个问题了。

问题

我运行多个 Web 应用程序,每个应用程序都在同一个 IIS 网站下的自己的虚拟目录中。结果发现,在虚拟目录中向 web.config 添加 existingResponse="PassThrough" 只有部分有效。如果没有设置,则永远不会出现任何 ColdFusion 错误,而是总是看到 IIS 500 错误。如果在虚拟目录的 web.config 中添加 existingResponse="PassThrough",仅在未直接调用 .cfm 脚本访问网站时(例如:example.com/ 而不是 example.com/index.cfm)才会转发 ColdFusion 错误。

解决方案

解决方案很简单。我只需要在根 IIS 网站的 web.config 中添加 existingResponse="PassThrough" 设置即可,一切正常工作。

我认为这是 IIS 8 和 8.5 中的错误,因为我在我的 IIS 7.5 服务器上进行了双重检查,而我不需要在根网站上添加这个属性。


2
虽然这似乎也解决了我的问题,但它有一个无法接受的副作用,即有效地禁用了我在IIS中配置的自定义404错误处理脚本,该脚本执行/error_404.cfm。 - Richard Davies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接