如果你想知道這個人的web配置可能看起來是這樣的:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpErrors existingResponse="PassThrough" />
...
</system.webServer>
</configuration>
在IIS的早期版本中,如果您的自定義腳本返回一個錯誤代碼,IIS忽略它,讓它通過。 但是您也可以將其設置爲使用自定義腳本處理錯誤狀態。
在我的舊服務器,如果給定的URL是404,IIS的建立是爲了EXECUT /404.cfm,其中顯示一個錯誤頁和返回使用<cfheader>
404個狀態碼。
但是,現在如果該腳本返回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,只是爲你感到難過。
認爲好主意應該是顯示web.config的示例 – Sergii 2011-02-11 11:23:36
IIS中的默認文檔是否設置爲index.cfm?如果它位於index.aspx或index.htm然後它可能試圖通過404錯誤通過沒有在ColdFusion上的404錯誤 – 2011-02-11 13:01:52
在網站的IIS屬性,看看404錯誤處理程序頁面設置爲什麼。 – eapen 2011-02-11 14:14:13