Windows-Server-2003
IIS 404 自定義錯誤
我已將 ASP.NET 3.5 應用程序部署到 64 位 Windows 2003 R2 伺服器。
在 web.config 我有以下
<customErrors mode="RemoteOnly" defaultRedirect="/404/"> <error statusCode="404" redirect="/404/"/> <error statusCode="500" redirect="/500/"/> </customErrors>
在 IIS 管理器的網站屬性中,我將 404 和 500 錯誤設置為 Type = “URL” 以及與 web.config 中相同的 URL。
我有一個萬用字元應用程序映射到 .NET 2.0 aspnet_isapi.dll 並關閉了“驗證文件是否存在”。
如果我嘗試點擊一個假的 .aspx 文件,我會成功發送到 404 頁面。我相信這是因為.aspx 到.NET DLL 的顯式映射。
如果我嘗試訪問一個虛假目錄,我只會收到一個純文字響應,上面寫著:
該系統找不到指定的文件。
這些對目錄的請求似乎沒有通過 .NET 管道路由,這是我期望(並且需要)發生的,因為萬用字元應用程序映射。
有任何想法嗎?
為了測試你的邏輯,我實際上走過了完整的過程。我使用 ETW 跟踪 IIS 和 ASP.NET 以及程序監視器來查看發生了什麼。這是我發現的:
- 當您為 aspnet_isapi.dll 添加“萬用字元映射”且未選中“驗證該文件是否存在”時,所有請求實際上都通過 .net 管道
- 當您訪問虛假目錄時,.net 實際上會查找所有 .config 文件。即 machine.config、root web.config(位於 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG)和您的 Web站點根目錄以查找可以處理您的請求的可能的 HttpHandler
- 由於沒有一個處理程序被配置為處理“目錄”請求,因此請求會退回
IISGeneral: GENERAL_STATIC_FILE_HANDLER
並失敗,0x80070002
即 FILENOTFOUND- 由於您將 IIS 自定義錯誤 404 配置為 /404/,因此它會查看目錄 c:\inetpub\wwwroot\404\,然後因另一個錯誤而失敗
0x80070002
並發送一般The system cannot find the file specified.
錯誤。- 當您訪問偽造的 main.aspx 頁面時,.aspx 請求在根 web.config 文件中處理,因此您會看到 .net 特定(找不到資源。)錯誤。
- 現在,當您為“萬用字元映射”選中“驗證該文件是否存在”時,伺服器會在將副檔名映射到應用程序之前檢查請求的腳本是否存在
- 因此,請求永遠不會通過 .net 管道並給您提供第 4 點中所述的錯誤。
希望這可以幫助。