Tôi có một trang web php chạy dưới IIS 7.5. Trang web được bảo mật bởi xác thực Windows và hoạt động tốt:
Khi người dùng truy cập trang web, họ được yêu cầu tên người dùng / mật khẩu và thông qua nếu được xác thực. Nếu người dùng nhấp vào Hủy hoặc nhập sai mật khẩu 3 lần, họ sẽ hiển thị trang lỗi 401:
Bây giờ tôi muốn hiển thị trang tùy chỉnh giải thích cách đăng nhập. Vì vậy, tôi đi đến các trang Lỗi, chọn mã trạng thái 401.2 và trỏ nó đến trang tôi muốn hiển thị:
Sau đó, đảm bảo các lỗi tùy chỉnh được bật cho tất cả mọi người. Và kaa-boom! Xác thực không hoạt động nữa, người dùng không được hiển thị với dấu nhắc mật khẩu. Như tài liệu nói, Windows xác thực hoạt động bằng cách gửi trả lời 401 trước, sau đó trình duyệt yêu cầu người dùng cung cấp thông tin đăng nhập của nhà cung cấp và sau đó họ sẽ tìm ra việc cần làm tiếp theo.
Điều gì xảy ra ở đây: trong yêu cầu đầu tiên cho trang IIS cố gắng gửi tiêu đề 401, nhưng thông báo rằng web.config nói "trên chuyển hướng 401 đến trang này". Và thay vì xác thực, nó chỉ cung cấp cho trang chuyển hướng.
Tôi đã thử thay thế 401, 401.1, 401.2 - không có sự khác biệt.
Tôi đang làm gì sai và làm thế nào để cung cấp trang tùy chỉnh về lỗi xác thực người dùng?
ps Đây là 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>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
<system.web>
<identity impersonate="false" />
<customErrors defaultRedirect="http://www.myserver.com/not_restricted/500.htm" mode="Off">
</customErrors>
</system.web>
</configuration>