使用ColdFusion 10/11的IIS 8/8.5上的错误500
如果我的ColdFusion脚本中有错误,我得到的是来自IIS而不是ColdFusion的500错误消息。只有当我在URL中提供文件名时才会发生这种情况,如果我打开没有脚本名称的URL(这会打开index.cfm),就不会发生这种情况。使用ColdFusion 10/11的IIS 8/8.5上的错误500
例如:
- IIS错误:http://www.example.com/index.cfm
- IIS错误:http://www.example.com/foobar.cfm
- ColdFusion的错误:http://www.example.com/
我可以重现对我的3个ColdFusion的平台2这个问题:
- 工作:IIS 7.5使用ColdFusion 10更新12(用更新连接器)
- 未工作:IIS 8使用ColdFusion 10更新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>
对我来说,看起来像IIS 8和IIS 8.5的ColdFusion连接器有问题。
好吧,我终于能够解决这个问题。
问题
我运行相同的IIS网站下的每个多个Web应用程序在自己的虚拟目录。事实证明,将existingResponse="PassThrough"
添加到web.config只能在虚拟目录中部分工作。没有这个设置,我从来没有得到任何ColdFusion错误,而是总是看到IIS 500错误。如果我在虚拟目录的web.config中添加existingResponse="PassThrough"
,则只有直接访问站点而不直接调用.cfm脚本(例如:example.com/而不是example.com/index.cfm)才会转发ColdFusion错误。
溶液
该溶液很容易。我只需要将existingResponse="PassThrough"
设置添加到根IIS网站的web.config中,并且一切正常。
我认为这是IIS 8和8.5中的一个错误,因为我在IIS 7.5服务器上检查了这个错误,并且我不必在根网站上添加属性。
虽然这似乎也解决了我的问题,但它具有不可接受的副作用,也有效地禁用了我在IIS中配置的自定义404错误处理程序脚本,以执行/error_404.cfm –
你在application.log中看到了什么吗? –
是的,我可以找到我引发的ColdFusion错误。 ColdFusion引发正确的错误,但IIS忽略它。 – android