В случае, если кому-то интересно, веб-конфигурация этого человека , вероятно, выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpErrors existingResponse="PassThrough" />
...
</system.webServer>
</configuration>
В более ранней версии IIS, если ваш пользовательский скрипт возвратил код ошибки, IIS проигнорировал егои пропустить это. Но вы также можете настроить его для обработки статуса ошибки с помощью пользовательских сценариев.
На моем старом сервере, если заданный URL-адрес был 404, IIS был настроен на execut /404.cfm, который отображал страницу с ошибкой , а возвращал код состояния 404 с использованием <cfheader>
.
Однако сейчас , если этот сценарий возвращает код состояния 404, в результате IIS возвращает ошибку сервера, а не возвращает ответ с кодом состояния 404.
Единственный способ избежать этого - использовать existingResponse="PassThrough"
, а затем использовать шаблон "Template Not Found" для всего сайта, установленный в CFAdmin.
Вот интересная часть.У меня есть index.cfm, настроенный в качестве индекса по умолчанию, и индекс only default для моего сайта.
Если перейти к /about/
, а /about/index.cfm
существует, то онотображает страницу, как если бы я попросил /about/index.cfm
.И если перейти к /about/index.cfm
и /about/index.cfm
, существует ли , а не , он выполняет шаблон 404 для всего сайта.
Но если я перехожу к /about/
и /about/
не существует как URL, он не пытается загрузить /about/index.cfm
и, таким образом, запускает шаблон 404 для всего сайта.Вместо этого он отображает пустую страницу!
Насколько я могу судить, не существует работоспособного решения этой проблемы .Похоже, что только люди, пишущие в .Net, могут решить эту проблему, поскольку они могут поставить флаг в генерируемом ответе, который буквально говорит IIS «Игнорировать код состояния».Я думаю, что Microsoft просто не заинтересована в поддержке альтернативного веб-приложения.
По сути, это решение: избавиться от existingResponse="PassThrough"
и вернуть неправильные коды состояния .
Все остальное будет слишком сложно реализовать.Обратите внимание, что это не работает, если вы создаете приложение или API RESTful.В этом случае вы должны создать виртуальный каталог только для этого, для которого вы можете назначить пользовательский файл web.config, который использует , использует existingResponse="PassThrough"
.Но если вам нужно разрешить настраиваемую обработку ошибок и настраиваемую обработку 404. Вы фактически облажались.
Хорошая новость - кроме API и Ajax, единственный раз, когда кто-то позаботится о статусекод на самом деле будет, когда они смотрят на ваши заголовки в любом случае, и в этом случае они увидят, что вы используете IIS, и вам просто жаль вас.