Quantcast
Channel: 黑暗執行緒
Viewing all articles
Browse latest Browse all 2311

customErrors與httpErrors

$
0
0
被抽考IIS網站的自訂HTTP 404錯誤網頁設定,學到新東西也釐清一些觀念,筆記備忘。

以Windows 2008 R2 IIS 7.5為例,網站管理介面有兩處可以自訂錯誤頁面,上方的ASP.NET區的.NET Error Pages與下方IIS區的Error Pages:

兩個設定介面有點不同,試著各自加上HTTP 404設定,但導向不同網頁,.NET Error Pages設定指向/NotFound/SystemWeb404.html:

Error Pages指向/NotFound/SystemWebServer404.html

設定結果會反應在web.config,.NET Error Pages設定被寫入system.web/customErrors,Error Pages則是寫到system.webServer/httpErrors

<?xmlversion="1.0"encoding="UTF-8"?>
<configuration>
<system.web>
<customErrorsmode="On">
<errorstatusCode="404"redirect="/NotFound/SystemWeb404.html"/>
</customErrors>
</system.web>
<system.webServer>
<urlCompressiondoDynamicCompression="true"/>
<httpErrors>
<removestatusCode="404"subStatusCode="-1"/>
<errorstatusCode="404"prefixLanguageFilePath=""
path="/NotFound/SystemWebServer404.html"responseMode="ExecuteURL"/>
</httpErrors>
</system.webServer>
</configuration>

這兩個設定有什麼不同呢?簡單來說,存取靜態檔案(如.js、.html、.css、.jpg…)發生錯誤會依照httpErrors設定辦事;由.NET處理程序接手的URL(例如:.aspx、.ashx、.svc、MVC註冊路由),出錯時則看customErrors裡的設定。

以下是簡單示範,輸入不存在的blah.gif看到的是SystemWebServer404.html、輸入不存在的blah.aspx則是SystemWeb.404.html,故得證。

補充一點:httpErrors有個errorMode屬性,預設為DetailedLocalOnly,相當於customErrors mode="RemoteOnly",故在本機測試將看不到自訂錯誤頁,要改成Cutom才看得到。這是IIS 7起加入的行為,還停在IIS 6的腦袋沒意識到有差異,花了點時間才搞定,特別加記一筆。


Viewing all articles
Browse latest Browse all 2311

Trending Articles