ASP.NET 針對每個請求的 URL 虛擬路徑,從機器層 → 應用程式根目錄 → 子目錄 依序合併 Web.config 設定。預設規則:**子目錄設定覆寫父目錄相同區段**,但區段處理器可自訂繼承邏輯。
/ (應用程式根目錄) → 允許所有用戶存取
/SubDir1 (含 Web.config) → 僅允許特定角色
/SubDir2 (無 Web.config) → 繼承 SubDir1 設定 (因同層最近有設定)
若根目錄無 Web.config,則繼承機器層 Machine.config (預設允許所有)。
設定繼承依賴 虛擬路徑,與實體磁碟結構無關。
實體:C:\Subdir1\Subdir2\MyResource.aspx
虛擬目錄 Vdir1 → C:\Subdir1
虛擬目錄 Vdir2 → C:\Subdir1\Subdir2
https://localhost/vdir1/subdir2/MyResource.aspx → 繼承 Vdir1 設定。https://localhost/vdir2/MyResource.aspx → 不繼承 Vdir1 設定 (虛擬路徑不同)。警告: 交叉映射虛擬目錄會導致不可預期的設定行為,甚至應用程式失效。嚴禁將同一實體目錄映射為多個虛擬路徑層級。
ASP.NET 設定僅對經由 aspnet_isapi.dll 處理的資源生效 (.aspx, .asmx, .ashx 等)。
靜態檔案 (.asp, .html, .txt, .gif, .jpg) 不受 <authorization> 等區段控制,若啟用目錄瀏覽,所有用戶均可存取。需搭配 IIS 原生 NTFS 權限或 URL Authorization 模組保護靜態資源。
在單一 Web.config 中針對特定子目錄/檔案套用不同設定:
<configuration>
<system.web>
<sessionState cookieless="true" timeout="10"/> <!-- 全域 -->
</system.web>
<location path="Sub1">
<system.web>
<httpHandlers>
<add verb="*" path="Sub1.Scott" type="Sub1.Scott"/>
<add verb="*" path="Sub1.David" type="Sub1.David"/>
</httpHandlers>
</system.web>
</location>
<location path="Sub2">
<system.web>
<httpHandlers>
<add verb="*" path="Sub2.Scott" type="Sub2.Scott"/>
<add verb="*" path="Sub2.David" type="Sub2.David"/>
</httpHandlers>
</system.web>
</location>
</configuration>
path 屬性支援相對虛擬路徑 (子目錄或檔案)。Web.config。託管環境 (ISP、共享主機) 必須防止使用者覆寫安全性設定 (如 Trust Level)。
<configuration>
<location path="Application1" allowOverride="false">
<system.web>
<trust level="High"/> <!-- 強制 High Trust,子目錄無法降為 Full -->
</system.web>
</location>
<location path="Application2" allowOverride="false">
<system.web>
<trust level="Medium"/>
</system.web>
</location>
</configuration>
若子目錄 Web.config 嘗試覆寫 <trust level="Full"/>,ASP.NET 將拋出設定錯誤 (Configuration Error),有效阻止權限提升攻擊。
掌握 ASP.NET 設定繼承的三大要點 —— 虛擬路徑決策、location 精準套用、allowOverride 鎖定關鍵區段 —— 是建立安全、可維護、多租戶友善的 ASP.NET 應用程式架構基石。部署前請務必以實際虛擬路徑測試設定生效順序,避免繼承衝突導致權限洩漏。
DHCP 服務器防偽指南:從臨時繞過到域級強制綁定的纵深防禦
IIS 6.0 開啟 GZip 壓縮完整配置:3 步圖解 + Metabase.xml 精確控制文件類型 + 自動化腳本
Nginx + PHP-FPM 檔案上傳失效完整排查指南:從 client_max_body_size 到 php.ini 核心參數
手把手教你優化 IIS 伺服器:基於 YSlow 的 13 步效能調校實戰
網站訪問出現「Directory Listing Denied」錯誤原因與解決方法
Ubuntu/Debian apt-get 出現「407 Proxy Authentication Required」錯誤的解決方法