Mam witrynę php działającą pod IIS 7.5. Witryna jest zabezpieczona przez uwierzytelnianie systemu Windows i działa dobrze:
Gdy użytkownicy przechodzą do witryny, są proszeni o podanie nazwy użytkownika / hasła i przejście, jeśli są uwierzytelnione. Jeśli użytkownicy klikną Anuluj lub trzykrotnie wprowadzą hasło, wyświetli się strona błędu 401:
Teraz chciałbym wyświetlić niestandardową stronę wyjaśniającą sposób logowania. Więc przechodzę do stron błędów, wybieram kod stanu 401.2 i wskazuję stronę, którą chciałbym wyświetlić:
Następnie upewnij się, że niestandardowe błędy są włączone dla wszystkich. I kaa-boom! Uwierzytelnianie nie działa, użytkownicy nie są proszeni o podanie hasła. Jak wynika z dokumentacji, uwierzytelnianie systemu Windows polega na tym, że najpierw wysyła odpowiedź 401, a następnie przeglądarka pyta użytkownika o poświadczenia dostawcy, a następnie zastanawia się, co dalej.
Co się dzieje tutaj: na pierwsze żądanie strony IIS próbuje wysłać nagłówek 401, ale zauważa, że web.config mówi „na przekierowaniu 401 na tę stronę”. I zamiast uwierzytelniania, po prostu daje stronę przekierowania.
Próbowałem wymienić 401, 401.1, 401.2 - nie zrobiłem żadnej różnicy.
Co robię źle i jak podać niestandardową stronę dotyczącą błędu uwierzytelnienia użytkownika?
ps Oto 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>