Классический ASP на IIS доставляет документ об ошибке вместо содержимого по HTTP 410 Gone

У меня есть приложение Classic ASP, работающее на серверах IIS (6/7). Когда запрашивается страница, которая больше не будет доступна, я хочу отправить Response.Status = "410 Gone" но все же доставить какой-то ErrorDocument, Похоже, что браузеры прекращают поиск, как только они получают 410.

За исключением IE, все браузеры отображают одну и ту же "страницу, которую вы запросили, была удалена", так что, я думаю, это настройка сервера. В.NET, похоже, есть TrySkipIisCustomErrors, но для Classic ASP, я на самом деле вполне уверен, что это где-нибудь в функции страниц ошибок в IIS Manager.

Могу ли я сказать, чтобы мой IIS все еще доставлял контент, даже если фактический URI отсутствует?

2 ответа

Решение

В корневом каталоге вашего веб-приложения вы должны добавить атрибут в поле web.config файл:

<system.webServer>
    <httpErrors existingResponse="PassThrough">
        …
    </httpErrors>
<system.webServer>

С existingResponse установлен в PassThrough, ответ будет доставлен, если существует существующий ответ. На сайте www.iis.net есть хорошая статья об ошибках HTTP.

Там не должно быть <error> элемент, особенно нет в коде состояния 410 (но, конечно, вы можете добавить один).

Вы можете разместить классическую страницу ASP, которая доставляет контент и код состояния HTTP, который вы хотите.

Я проверил это на IIS 7.5 с помощью следующего кода:

    <% Response.Status = "410 Gone" %>
    <html>
    <body>
    <h1>this is my content</h1>
    </body>
    </html>

Firefox показывает содержимое как есть, а не общую страницу с ошибкой.

Обновить:

Вам нужно будет отключить пользовательские ошибки, чтобы это работало. Вы можете сделать это, добавив следующую строку в ваш web.config (в раздел configuration/system.web):

<customErrors mode="Off" />

В противном случае страница ошибки по умолчанию отменяет ваш вывод. Классический ASP действительно не похож на TrySkipIisCustomErrors,

Другие вопросы по тегам