2014-05-06 51 views
6

如果我的ColdFusion腳本中有錯誤,我得到的是來自IIS而不是ColdFusion的500錯誤消息。只有當我在URL中提供文件名時纔會發生這種情況,如果我打開沒有腳本名稱的URL(這會打開index.cfm),就不會發生這種情況。使用ColdFusion 10/11的IIS 8/8.5上的錯誤500

例如:

我可以重現對我的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連接器有問題。

+0

你在application.log中看到了什麼嗎? –

+0

是的,我可以找到我引發的ColdFusion錯誤。 ColdFusion引發正確的錯誤,但IIS忽略它。 – android

回答

6

好吧,我終於能夠解決這個問題。

問題

我運行相同的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服務器上檢查了這個錯誤,並且我不必在根網站上添加屬性。

+2

雖然這似乎也解決了我的問題,但它具有不可接受的副作用,也有效地禁用了我在IIS中配置的自定義404錯誤處理程序腳本,以執行/error_404.cfm –