2010-02-26 1 views
6

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

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

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

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

ответ

6

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

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

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

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

Update:

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

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

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

Если ни один из вариантов не соответствует вашей ситуации, тогда это может быть возможно, но решение для меня не сразу становится очевидным.

+0

hmmm Я думал, что все, что вы могли бы сделать в shtml-файлах в IIS, было include и exec. я попробую это в понедельник, спасибо – Joel

+0

Мне тоже было интересно, когда я разместил это предложение, но я подумал, что стоит упомянуть хотя бы. Надеюсь, это сработает. – lostriebo

+0

спасибо, я пошел по пути использования URL/404.asp. Это работало достаточно хорошо. Еще раз спасибо! – Joel

0

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

+0

спасибо, это то, что я пытаюсь. – Joel

+0

К сожалению, теперь я понимаю вашу точку № 1, извините. Интуитивно, я не то, что страницы ошибок могут быть динамическими. – Timores