Итак, у меня есть очень простой сайт, размещенный в IIS (пока только прямой необработанный html без кода .Net)
В моем web.config у меня есть следующее:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpErrors>
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/404.html" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
</configuration>
Он был добавлен в web.config менеджером IIS и отражает то, что я нашел в Интернете, как действительную конфигурацию для ошибок 404 для перенаправления на мою пользовательскую страницу 404.
Однако я все еще получаю сгенерированный IIS HTTP Error 404.0 - Not Found
страницу назад всякий раз, когда я перехожу на страницу, которой не существует.
Есть идеи, что я здесь делаю не так?
Настроить:
Всякий раз, когда элемент конфигурации в моих файлах конфигурации IIS не производит ожидаемого мной поведения, я в первую очередь смотрю на официальные (и довольно подробные) Справочник по настройке IIS.net документация.
Если вы перейдете к httpErrors
страница и прокрутите вниз до "Атрибуты", вы обнаружите, что errorMode
По умолчанию для атрибута установлено значение «Подробный локальный только», и что из этого следует:
Возвращает подробную информацию об ошибке, если запрос поступает с локального компьютера, и возвращает настраиваемое сообщение об ошибке, если запрос поступает с внешнего компьютера.
Ага! Если ваш запрос приводит к появлению страницы с ошибкой при просмотре локально, вы получите подробную страницу с ошибкой, а не пользовательскую!
Чуть ниже есть запись для Custom
стоимость:
Заменяет ошибку, которую генерирует модуль или сервер, на указанную вами настраиваемую страницу. Этот режим полезен для предоставления конечным пользователям более понятных сообщений об ошибках.
Заметка: Этот параметр отключает подробные ошибки даже для локальных запросов.
И все, просто добавляем атрибут errorMode
со стоимостью Custom
к httpErrors
узел, чтобы переопределить значение по умолчанию:
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/404.html" responseMode="ExecuteURL" />
</httpErrors>