Я успешно настроил пользовательские статические страницы ошибок для 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). Выполняемый файл должен содержать сценарий, который устанавливает код состояния ответа.
Пример:
<% response.status = "404 Page Not Found" %>