ASP/ASP.NET 應用程式在 IIS 7/7.5 上拋出 HTTP 500 錯誤時,預設僅顯示通用「內部伺服器錯誤」頁面,隱藏詳細例外堆疊、行號與模組資訊,導致除錯困難。本文提供瀏覽器端與 IIS 伺服器端雙重配置,讓詳細錯誤資訊安全顯示。
%、物件未實例化)。../ 未啟用、虛擬目錄對應錯誤)。


<configuration>
<system.webServer>
<httpErrors errorMode="Detailed" /> <!-- 等同 IIS 管理員設定 -->
<!-- 或僅對本機用戶顯示詳細錯誤,遠端顯示自訂頁面 -->
<httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File">
<remove statusCode="500" />
<error statusCode="500" path="/errors/500.html" responseMode="File" />
</httpErrors>
</system.webServer>
<system.web>
<customErrors mode="Off" /> <!-- ASP.NET 詳細錯誤 (僅 .NET 執行階段錯誤) -->
<compilation debug="true" targetFramework="4.0" /> <!-- 開發環境啟用除錯 -->
</system.web>
</configuration>
| 環境 | 建議 errorMode | 說明 |
|---|---|---|
| 開發/測試 | Detailed | 開發人員即時看到完整堆疊,加速除錯 |
| 預演/Staging | DetailedLocalOnly | 內部測試者見詳細,外部使用者見友善頁面 |
| 生產 | Custom / DetailedLocalOnly | 絕不對外部顯示堆疊/路徑/資料庫結構;配合自訂錯誤頁面記錄事件 ID 供運維追蹤 |
Response.Write(1/0) 或連接不存在資料庫)。%SystemDrive%\inetpub\logs\LogFiles\W3SVC1\) 確認 500 子狀態碼 (如 500.19=設定錯誤, 500.21=模組錯誤)。雙端配置 (瀏覽器關閉易懂錯誤 + IIS 設定詳細錯誤) 可確保開發測試階段「所見即所得」,生產環境則透過 DetailedLocalOnly 與自訂錯誤頁面兼顧安全性與可維運性。