Учитывая, что это IIS, добавление
<% Response.Status = "404 Not Found" %>
к началу 404.shtml следует изменить код ответа на 404.
Я не на машине с Windows, поэтому я не могу проверить ее в данный момент, чтобы проверить.
Обновление:
Наконец-то я смог запустить несколько тестов на IIS 6. Как вы упомянули в комментарии к моему сообщению, файл .shtml не позволяет запускать команды сценария. Таким образом, есть как минимум два способа обойти это:
Вместо того, чтобы называть свою пользовательскую страницу обработки 404 404.shtml , назовите ее 404.asp . Пользователь никогда не должен видеть фактическое имя страницы, поэтому оно не должно вызывать никаких проблем. Обратите внимание, что для «Active Server Pages» должно быть установлено значение «Разрешено» в папке расширений веб-службы IIS.
Измените сопоставление расширения страницы для .shtml, чтобы использовать asp.dll вместо ssinc.dll. Это можно сделать из IIS, выбрав веб-сайт и выбрав «Свойства» -> вкладка «Домашний каталог» -> «Конфигурация» -> вкладка «Сопоставления». Обратите внимание, что это далеко не идеальное решение, потому что теперь все ваши .shtml файлы будут обрабатываться asp.dll . Это может привести к тому, что ваши страницы будут отображаться медленнее (при условии, что asp.dll обрабатывает файлы медленнее, чем ssinc.dll из-за большей сложности) и нарушает принцип наименьших привилегий .
Если ни один из вариантов не подходит для вашей ситуации, то это все еще возможно, но решение не сразу для меня очевидно.