IIS 6 部署 ASP.NET MVC 需將所有要求導向 ASP.NET ISAPI,但可透過靜態資源繞過管線提升效能。本文詳細說明部署步驟、萬用字元對應設定、靜態資源隔離與版本差異處理。
aspnet_isapi.dll。D:\WebApps\MyMvcApp)。Content、Scripts 資料夾,目錄名稱建議小寫。System.Web.Mvc.dll;MVC 3+:建議機器級安裝 MVC 套件(Razor、WebPages 等相依組件多)。MvcAppPool),.NET 版本設為 v4.0(MVC 3+)或 v2.0(MVC 2),管線模式僅有「傳統」。C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll(MVC 3+)C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll(MVC 2)

Content 資料夾 → 「內容」。.* 萬用字元對應,或確認靜態副檔名對應至 aspnet_isapi.dll 並勾選「確認檔案存在」。Content、Scripts 設為獨立虛擬目錄,應用程式集區設為「無受控碼」或直接不設定萬用字元對應。
| 問題 | 原因 | 解決 |
|---|---|---|
| 404 Not Found(無副檔名 URL) | 未取消「確認檔案存在」 | 步驟 2 必須取消勾選 |
| 靜態檔案 401/403 | 靜態目錄繼承網站驗證設定 | 虛擬目錄內容 → 目錄安全性 → 匿名存取啟用 |
| MVC 3 部署缺組件 | 未機器級安裝 MVC 3 | 執行 AspNetMVC3Setup.exe 或 NuGet 套件還原含所有相依 |
| 驗證/授權失效 | 萬用字元對應導致所有要求進管線 | web.config |
安裝 URL Rewrite Module 2.0,在 web.config 設定:
<system.webServer>
<rewrite>
<rules>
<rule name="MVC Routing" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
此法需 IIS 7+ 整合管線,IIS 6 需搭配 ISAPI Rewrite(Helicon Ape/Iconic)第三方模組。
IIS 6 部署 MVC 核心在於萬用字元對應 + 取消檔案存在檢查,配合靜態資源目錄隔離可顯著提升效能。但 IIS 6 於 2015 年結束支援,新專案強烈建議部署於 IIS 8.5+ (Windows Server 2012 R2+) 整合管線環境,原生支援 Extensionless URL、模組化管線、效能與安全性大幅優於 IIS 6 時代的權宜之計。