Пользовательская страница ошибки 404 не работает в IIS 8.5

Я недавно переехал на хост, и мне снова пришлось настраивать ошибки клиентов в IIS.

Я могу перейти на страницы администратора и ошибок IIS следующим образом:

Пользовательские ошибки в IIS

Затем я могу перейти к настраиваемым ошибкам и настроить следующие параметры:

Настройка ошибок клиента

Это создает мой файл web.config следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="ExecuteURL">
            <remove statusCode="500" subStatusCode="100" />
            <remove statusCode="500" subStatusCode="-1" />
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" prefixLanguageFilePath="" path="/error_404.asp" responseMode="ExecuteURL" />
            <error statusCode="500" prefixLanguageFilePath="" path="/error_500.asp" responseMode="ExecuteURL" />
            <error statusCode="500" subStatusCode="100" path="/error_500.asp" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</configuration>

Когда я тестирую страницы, ошибка 505 работает нормально и перенаправляет на нужную страницу, но 404 не перенаправляет и возвращает стандартную ошибку IIS 404. Я подтвердил, что страница с ошибкой 404 находится на сервере в правильном месте.

Я не понимаю, что мне еще нужно делать.


person 4532066    schedule 05.07.2015    source источник


Ответы (2)


В конце концов, все заработало (помогло найти это: http://forums.iis.net/t/1173965.aspx), используя:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
            <remove statusCode="500" subStatusCode="100" />
            <remove statusCode="500" subStatusCode="-1" />
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" path="/error_404.asp" responseMode="ExecuteURL" />
            <error statusCode="500" prefixLanguageFilePath="" path="/error_500.asp" responseMode="ExecuteURL" />
            <error statusCode="500" subStatusCode="100" path="/error_500.asp" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</configuration>
person 4532066    schedule 07.11.2015

У меня была аналогичная проблема, когда у меня есть настраиваемая страница 404 в / Error / Missing, но она не отображалась для статических файлов, которых не было, или для папок / каталогов, которые существуют (но не должны обслуживаться MVC. ). Контроллер для отсутствующей страницы имеет следующее:

    Response.AddHeader("Content-Type","text/html; charset=utf-8");
    Response.TrySkipIisCustomErrors = true;
    Response.StatusCode = (int)HttpStatusCode.NotFound; // 404

Кроме того, я не получал свою страницу с пользовательской ошибкой, если возвращал в контроллер следующее:

return HttpNotFound();

Я мог бы изменить ошибки IIS по умолчанию на пустую страницу, если бы установил PassThrough:

<httpErrors existingResponse="PassThrough" />

При изменении его на «Заменить» снова отображаются ошибки IIS по умолчанию.

У меня также был раздел в моем web.config, но я удалил его, так как у меня IIS 8.5, похоже, он больше не нужен.

<system.web>
    <customErrors mode="Off">
</system.web>

Таким образом, я не мог избавиться от сообщений IIS по умолчанию - ни однострочных, ни более подробных. Мой раздел httpErrors выглядел так:

<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
    <remove statusCode="404" />
    <error statusCode="404" path="/Error/Missing" />
</httpErrors>

Наконец, я натолкнулся на этот вопрос, посмотрел на другой ответ на этот вопрос и понял, что могу попробовать ResponseMode в каждой строке ошибки. Я думал, что в этом нет необходимости, поскольку у меня был установлен defaultResponseMode, но это имеет значение !!

Итак, если вы хотите обслуживать настраиваемую страницу 404, используйте этот модуль httpErrors:

<httpErrors errorMode="Custom">
    <remove statusCode="404" />
    <error statusCode="404" path="/Error/Missing" responseMode="ExecuteURL" />
</httpErrors>

Я поместил все эти подробности здесь, так что, надеюсь, это покажется кому-то еще, ищущим то же самое, что и я - надеюсь, это поможет!

person Matt Kemp    schedule 28.09.2016
comment
Для меня мне пришлось добавить existingResponse = Replace, например. ‹HttpErrors errorMode = Custom existingResponse = Заменить defaultResponseMode = ExecuteURL› - person SteveP; 08.10.2019
comment
У меня есть это: ‹customErrors mode = RemoteOnly redirectMode = ResponseRewrite defaultRedirect = ~ / ErrorPages / InternalError.aspx› ‹error statusCode = 403 redirect = ~ / ErrorPages / Forbidden.aspx /› ‹error statusCode = 404 redirect = ~ / ErrorPages / PageNotFound .aspx / ›‹ error statusCode = 500 redirect = ~ / ErrorPages / InternalError.aspx / ›‹/customErrors›. Не работает. Я запускаю его локально, и при вводе неправильного URL-адреса меня не перенаправляют на ErrorPages / PageNotFound.aspx. Любая идея? - person Mark; 08.01.2021