HTTP 401 代表「未授權」,但子狀態碼揭示完全不同的根因。本文針對 IIS 5/6/7 經典三大子錯誤提供標準化排查流程。
| 子碼 | 顯示訊息 | 核心原因 | 核心對策 |
|---|---|---|---|
| 401.1 | 登入失敗:認證無效 | 匿名帳號 IUSR_* 被停用、鎖定、密碼錯誤、無「從網路存取此電腦」權限 | 啟用帳號、重設密碼、授予本地原則權限 |
| 401.2 | 登入失敗:伺服器設定錯誤 | 網站「目錄安全性」未勾選「啟用匿名存取」 | 勾選匿名存取、指定有效帳號密碼 |
| 401.3 | 未授權:ACL 拒絕存取資源 | 匿名帳號(通常屬 Guests)無網站目錄 NTFS 讀取權限 | 於目錄安全性頁籤授予 IUSR_* 讀取/執行權限 |
IUSR_機器名)。lusrmgr.msc → 使用者 → 找到該帳號 → 確認未勾選「帳號已停用」、密碼未過期。本地原則 → 使用者權利指派 → 從網路存取此電腦Guests)在列表中。IIS_WPG(IIS 6)或 IIS_IUSRS(IIS 7+)群組,而非 Guests,符合最小權限原則。iisreset)。D:\WebRoot) → 右鍵內容 → 安全性。IUSR_機器名)或 IIS_IUSRS 群組。w3wp.exe + Access Denied,即時定位被拒絕的檔案/登錄表路徑。ApplicationPoolIdentity,實際存取檔案時會轉換為虛擬帳號 IIS AppPool\PoolName,需於 NTFS 授權該虛擬帳號。在網站根目錄建立 test.asp:
<%
Response.Write "Auth_User: " & Request.ServerVariables("AUTH_USER") & "<br>"
Response.Write "Auth_Type: " & Request.ServerVariables("AUTH_TYPE") & "<br>"
Response.Write "Logon_User: " & Request.ServerVariables("LOGON_USER") & "<br>"
%>
瀏覽該頁,觀察變數值即可判斷目前驗證狀態與生效帳號。