ฉันมีเว็บไซต์ php ที่ทำงานภายใต้ IIS 7.5 ไซต์ดังกล่าวได้รับการรับรองความปลอดภัยโดยการรับรองความถูกต้องของ Windows และทำงานได้ดี:
เมื่อผู้ใช้ไปที่ไซต์พวกเขาจะถามชื่อผู้ใช้ / รหัสผ่านและผ่านหากได้รับการรับรองความถูกต้อง หากผู้ใช้คลิกยกเลิกหรือพิมพ์รหัสผ่านผิด 3 ครั้งพวกเขาจะแสดงหน้าข้อผิดพลาด 401:
ตอนนี้ฉันต้องการแสดงหน้าเว็บที่กำหนดเองซึ่งอธิบายวิธีการลงชื่อเข้าใช้ ดังนั้นฉันไปที่หน้าข้อผิดพลาดเลือกรหัสสถานะ 401.2 และชี้ไปที่หน้าที่ฉันต้องการแสดง:
จากนั้นตรวจสอบให้แน่ใจว่าได้เปิดข้อผิดพลาดที่กำหนดเองสำหรับทุกคน และ kaa-boom! การรับรองความถูกต้องไม่ทำงานอีกต่อไปผู้ใช้จะไม่แสดงพร้อมท์รหัสผ่าน ตามที่เอกสารระบุว่าการพิสูจน์ตัวจริงของ Windows ทำงานโดยส่ง 401 คำตอบก่อนจากนั้นเบราว์เซอร์จะถามผู้ใช้ถึงข้อมูลประจำตัวของผู้ให้บริการ
จะเกิดอะไรขึ้นที่นี่: เมื่อมีการร้องขอครั้งแรกสำหรับหน้า IIS พยายามส่ง 401-header แต่สังเกตว่า web.config พูดว่า "ใน 401 เปลี่ยนเส้นทางไปยังหน้านี้" และแทนที่จะให้การรับรองความถูกต้องจะให้หน้าเปลี่ยนเส้นทาง
ฉันได้ลองแทนที่ 401, 401.1, 401.2 - ไม่ได้สร้างความแตกต่าง
ฉันทำอะไรผิดและจะให้หน้ากำหนดเองกับข้อผิดพลาดการตรวจสอบผู้ใช้
ป.ล. นี่คือ 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>