Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

IIS 6 環境下 ASP.NET 2.0/4.0 共存導致 eurl.axd 錯誤的三種解決方案

編輯:關於伺服器

在 IIS 6 同時啟用 ASP.NET 2.0 與 4.0 時,網站可能拋出 System.Web.HttpException: Path '//eurl.axd/' was not found 錯誤。此問題源於 ASP.NET 4.0 的無副檔名 URL 處理機制與 ASP.NET 2.0 管線不相容。本文提供三種解決方案,依情境選擇。

錯誤成因

  1. ASP.NET 4.0 偵測到網站設為 4.0,產生無副檔名 URL 傳遞給受管管線。
  2. 若同站點下有虛擬目錄設為 ASP.NET 2.0,ASP.NET 2.0 會將 URL 重寫並插入 eurl.axd 字串。
  3. ASP.NET 2.0 無法辨識 eurl.axd,嘗試尋找實體檔案失敗,拋出 HttpException。

方案一:統一降級為 ASP.NET 2.0(不需 4.0 功能)

若網站無需 ASP.NET 4.0 新特性(MVC 2/3、.NET 4 語法、動態語言執行平台等),直接在 IIS 6 網站屬性 → ASP.NET 索引標籤,將版本切回 2.0.50727。最簡單、零風險。

方案二:隔離虛擬目錄至獨立網站(需 4.0 功能)

若主站需 4.0,但部分舊模組僅支援 2.0:

  1. 建立新網站(新 IP/連接埠/主機標頭)。
  2. 將使用 ASP.NET 2.0 的虛擬目錄移至新網站,設定為 2.0 應用程式集區。
  3. 主站保持 4.0,透過跨域/反向 Proxy/重寫規則整合前端入口。

優點:版本隔離徹底。缺點:部署複雜度上升、需處理跨站認證/Session 共享。

方案三:停用 ASP.NET 4.0 無副檔名 URL 處理(註冊表修改,不建議長期使用)

若上述方案均不可行,可關閉 ASP.NET 4.0 的 Extensionless URL 處理:

  1. 開啟 regedit,定位至:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0
  2. 新增 DWORD 值:
    名稱:EnableExtensionlessUrls
    值:0(1=啟用,0=停用)
  3. 命令列執行 iisreset 重新載入設定。

副作用:ASP.NET 4.0 應用將無法使用無副檔名 URL(如 MVC 路由、Web API、友善網址),需在 web.config 明確對應 .aspx、.mvc 等副檔名,或改用 Wildcard Mapping。

進階建議:遷移至 IIS 7+ 整合管線模式

IIS 6 已於 2015 年結束支援。根本解決之道是升級至 Windows Server 2012 R2+ / IIS 8.5+,採用整合管線模式:

  • 單一應用程式集區對應單一 .NET 版本(CLR 2.0 或 4.0),版本隔離徹底。
  • 無 eurl.axd 機制,原生支援 Extensionless URL。
  • 模組管線統一,效能與相容性大幅提升。

驗證步驟

  1. 套用方案後,瀏覽原報錯頁面,確認無 eurl.axd 例外。
  2. 檢查事件檢視器 → Application 記錄,無 ASP.NET 4.0/2.0 衝突錯誤。
  3. 啟用失敗要求追蹤 (FREB) 監控疑似路徑。

結語

IIS 6 雙版本共存是歷史遺留問題,方案一最省力,方案二最徹底,方案三為權宜之計。長遠規劃應納入 IIS 升級/應用現代化路線圖,徹底消除架構層面的版本衝突風險。

Copyright © Windows教程網 All Rights Reserved