Страницы с ошибками Coldfusion и IIS7.5

Для того, чтобы ColdFusion мог показывать свои ошибки, а не просто ошибку сервера (код 500), я добавил в web.config некоторые выводы на этом сайте.

Проблема выглядит решенной, но...

Когда я посещаю несуществующий каталог в IIS, он возвращает "пустую" страницу без кода состояния. Если я переключаю его обратно с автоматического перехода на автоматический, IIS снова переходит на страницу ошибок, и больше ошибок ColdFusion не появляется.

У кого-нибудь есть решение? Я провел некоторое исследование и "подозреваю", что, возможно, проблема в JWildcardhandler, но я не смог найти решение этой проблемы.

Очень признателен!

2 ответа

Если кому-то интересно, веб-конфигурация этого человека выглядит следующим образом:

<?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" а затем с использованием общеизвестного шаблона "Шаблон не найден", установленного в CFAdmin.

Вот интересная часть. У меня есть index.cfm, настроенный как индекс по умолчанию, и единственный индекс по умолчанию для моего сайта.

Если я пойду к /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 и просто жаль тебя

Сохраняя проход, вы можете использовать перезапись для обработки пустой страницы:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /404.cfm [NC,L,NS]

Переписывание в основном означает - если файл и каталог не существуют, перенаправьте на "404.cfm. Также добавьте 404 cfheader на страницу 404.cfm.

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