Пользовательская ошибка IIS 404: вместо URL-адреса возвращается код ответа 200 - PullRequest
6 голосов
/ 27 февраля 2010

Я пытаюсь вернуть пользовательскую страницу 404, используя IIS6. (У меня есть сайт, который состоит в основном из .shtml страниц, созданных с использованием подвижного типа). Я пробовал это двумя способами:

1) установить обработчик ошибок 404 в IIS для типа «файл» с путем \ 404.html. Это работает, но это также означает, что я не могу импортировать верхний и нижний колонтитулы моего сайта (следовательно, .shtml). Попытка указать обработчику ошибок 404 на 404.shtml приводит к странице 404 по умолчанию ... я думаю, IIS может не обрабатывают shtml файлы в 404.

2) установите тип "URL". Это прекрасно работает, за исключением того, что код ответа больше не 404! Это 200.

Как мне заставить IIS ответить кодом ответа 404 с содержимым моего файла 404.shtml?

Ответы [ 2 ]

6 голосов
/ 27 февраля 2010

Учитывая, что это IIS, добавление

<% Response.Status = "404 Not Found" %>

к началу 404.shtml следует изменить код ответа на 404.

Я не на машине с Windows, поэтому я не могу проверить ее в данный момент, чтобы проверить.

Обновление:

Наконец-то я смог запустить несколько тестов на IIS 6. Как вы упомянули в комментарии к моему сообщению, файл .shtml не позволяет запускать команды сценария. Таким образом, есть как минимум два способа обойти это:

  1. Вместо того, чтобы называть свою пользовательскую страницу обработки 404 404.shtml , назовите ее 404.asp . Пользователь никогда не должен видеть фактическое имя страницы, поэтому оно не должно вызывать никаких проблем. Обратите внимание, что для «Active Server Pages» должно быть установлено значение «Разрешено» в папке расширений веб-службы IIS.

  2. Измените сопоставление расширения страницы для .shtml, чтобы использовать asp.dll вместо ssinc.dll. Это можно сделать из IIS, выбрав веб-сайт и выбрав «Свойства» -> вкладка «Домашний каталог» -> «Конфигурация» -> вкладка «Сопоставления». Обратите внимание, что это далеко не идеальное решение, потому что теперь все ваши .shtml файлы будут обрабатываться asp.dll . Это может привести к тому, что ваши страницы будут отображаться медленнее (при условии, что asp.dll обрабатывает файлы медленнее, чем ssinc.dll из-за большей сложности) и нарушает принцип наименьших привилегий .

Если ни один из вариантов не подходит для вашей ситуации, то это все еще возможно, но решение не сразу для меня очевидно.

0 голосов
/ 27 февраля 2010

В диспетчере IIS откройте «Свойства» вашего веб-сайта (или виртуального каталога) и перейдите на вкладку «Пользовательские ошибки». Там вы можете указать, какой файл будет отправлен в случае каждого кода ошибки, включая 404.

...