Iis-7.5

IIS 7.5:如何使用 Windows 身份驗證配置自定義身份驗證錯誤頁面。401頭問題

  • June 3, 2015

我有一個在 IIS 7.5 下執行的 php 網站。該站點由 Windows 身份驗證保護,並且執行良好:

Windows 身份驗證已開啟

當使用者訪問該站點時,他們會被要求輸入使用者名/密碼,如果經過身份驗證則可以通過。如果使用者點擊取消或輸錯密碼 3 次,則會顯示 401 錯誤頁面:

醜陋的401頁面

現在我想顯示解釋如何登錄的自定義頁面。所以我轉到錯誤頁面,選擇狀態程式碼 401.2 並將其指向我要顯示的頁面:

錯誤頁面設置

然後確保為每個人打開自定義錯誤。和咔嚓!身份驗證不再起作用,不會向使用者顯示密碼提示。如文件所述,Windows 身份驗證首先發送 401 回复,然後瀏覽器要求使用者提供憑據,然後他們確定下一步該做什麼。

這裡發生了什麼:第一次請求頁面時,IIS 嘗試發送 401-header,但注意到 web.config 顯示“在 401 上重定向到此頁面”。而不是身份驗證,它只是提供重定向頁面。

我試過更換 401、401.1、401.2 - 沒有區別。

我在做什麼錯以及如何在使用者身份驗證錯誤上提供自定義頁面?

ps這裡是web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <system.webServer>
       <httpErrors errorMode="Custom">
           <remove statusCode="500" subStatusCode="-1" />
           <remove statusCode="404" subStatusCode="-1" />
           <remove statusCode="401" subStatusCode="-1" />
           <error statusCode="401" subStatusCode="2" prefixLanguageFilePath="" path="/not_restricted/401.htm" responseMode="ExecuteURL" />
           <error statusCode="404" prefixLanguageFilePath="" path="/not_restricted/404.htm" responseMode="ExecuteURL" />
       </httpErrors>
       <httpProtocol>
           &lt;customHeaders&gt;
               &lt;remove name="X-Powered-By" /&gt;
           &lt;/customHeaders&gt;
       &lt;/httpProtocol&gt;
   &lt;/system.webServer&gt;
   &lt;system.web&gt;
       &lt;identity impersonate="false" /&gt;
       &lt;customErrors defaultRedirect="http://www.myserver.com/not_restricted/500.htm" mode="Off"&gt;
       &lt;/customErrors&gt;
   &lt;/system.web&gt;
&lt;/configuration&gt;

試試這個:

改變:

&lt;error statusCode="401" subStatusCode="2" prefixLanguageFilePath="" path="/not_restricted/401.htm" responseMode="ExecuteURL" /&gt;

&lt;error statusCode="401" subStatusCode="2" prefixLanguageFilePath="" path="not_restricted\401.htm" responseMode="File" /&gt;

使用響應模式“文件”IIS 只是載入該文件的內容並顯示它,它仍然將 401 狀態發送回客戶端。

我曾經使用“ExecuteURL”,但了解到文件模式效果更好。您只需確保錯誤頁面中的任何連結資源仍然有效。

引用自:https://serverfault.com/questions/458394