Назад | Перейти на главную страницу

IIS 7 возвращает HTTP 200 на настраиваемой странице ошибки 404

Я успешно настроил пользовательские статические страницы ошибок для IIS7. IIS7 в настоящее время работает как шлюз для приложения Java Tomcat. Проблема в том, что при обслуживании страницы ошибки 404 она обслуживается с заголовком кода состояния HTTP 200. Мне нужен способ настроить IIS для продолжения отправки HTTP 404. Страница ошибки существует как статическая страница в корневом веб-каталоге.

Это основная часть моего файла web.config:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="HTTP to HTTPS Redirect" enabled="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTPS}" pattern="off" />
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
            </rule>
            <rule name="Reverse Proxy" stopProcessing="true">
                <match url="(.*)" />
                <action type="Rewrite" url="http://localhost:8080/{R:1}" />
                <conditions>
                    <add input="{R:1}" pattern="error/*." negate="true" />
                </conditions>
            </rule>
        </rules>
    </rewrite>
    <httpErrors errorMode="Custom" existingResponse="Auto">
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/error/404.htm" responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>

Перейти к использованию responseMode="File" однако трюк с этим будет использовать относительные пути к файлам, если вы не разблокируете или не установите значение true system.webServer/httpErrors allowAbsolutePathsWhenDelegated.

Пример отрывка из web.config:

<httpErrors>
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" prefixLanguageFilePath="" path="error\404.htm" responseMode="File" />
</httpErrors>

Когда используешь executeURL, файл должен быть чем-то, что визуализируется динамически (а-ля .asp). Выполняемый файл должен содержать сценарий, который устанавливает код состояния ответа.

Пример:

  1. Измените свой 404.htm на 404.asp
  2. Сохраните следующий код в верхней части 404.asp:

<% response.status = "404 Page Not Found" %>