Подтвердить что ты не робот

Пользовательский 404 IIS7 не отображается

создан новый веб-сайт IIS7 с пулом приложений Intergrated.net 4.0.

URL-адреса, заканчивающиеся на .aspx, показывают пользовательский 404, что-либо еще дает страницу с синим сервером "Ошибка HTTP 404.0 - не найдена Ресурс, который вы ищете, был удален, изменилось его имя или временно недоступно ". (так что ничего общего с IE)

<customErrors redirectMode="ResponseRewrite" mode="On" defaultRedirect="/pages/404.aspx" />
</system.web>
<system.webServer>
    <httpErrors  >
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/pages/404.aspx" responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>

также попробовал

<httpErrors existingResponse="PassThrough" />

но это только привело к пустым ответам.

Я нашел только одну ссылку на полезность выполнения appcmd для проверки пользовательской обработки ошибок HTTP, но вот результаты.

C:\Windows\System32\inetsrv>appcmd list config "http://mysite/file.notexist" -section:httpErrors

<system.webServer>
    <httpErrors>
        <error statusCode="401" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="401.htm" />
        <error statusCode="403" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="403.htm" />
        <error statusCode="404" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="404.htm" />
        <error statusCode="405" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="405.htm" />
        <error statusCode="406" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="406.htm" />
        <error statusCode="412" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="412.htm" />
        <error statusCode="500" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="500.htm" />
        <error statusCode="501" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="501.htm" />
        <error statusCode="502" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="502.htm" />
    </httpErrors>
</system.webServer>

что нечетно, потому что в менеджере iis7 страницы с ошибками показывают

404 /pages/404.aspx Execute URL Local

.Net Error Pages ничего не показывает, хотя у меня была запись.

Вопрос 1: какие шаги необходимо предпринять для совершенно нового сайта asp.net 4 iis7 для создания пользовательской страницы ошибок .net для каждого результата 404?

Вопрос 2: почему обработчик .net работает для файлов .aspx и ничего больше?

note: установите 404 на уровне сервера, а команда appcmd затем покажет пользовательский 404 в пути, но не имеет никакого значения, чтобы сайт не показывал 404.

Итак, я предполагаю, что это красная селедка.

4b9b3361

Ответ 1

Ответ

заключался в использовании

    <httpErrors existingResponse="Replace" errorMode="Custom">
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/pages/404.aspx?he" responseMode="ExecuteURL" />
    </httpErrors>

и не иметь никаких системных ошибок.

это работало как для запросов .aspx, так и для non.aspx.

странно эта комбинация не появилась ни в одной из сообщений в блоге и ответах stackoverflow, которые я исследовал, просто удача я попробовал.

Ответ 2

<httpErrors existingResponse="PassThrough" />

работал у меня в IIS 7 (Windows Server 2008 R2).

Моя проблема была у меня в моем web.config, но в <location>. Перемещение его в корень <system.webServer> исправлено.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    ...
    <system.webServer>
        ...
        <httpErrors existingResponse="PassThrough" />
    </system.webServer>
</configuration>

Ответ 3

Для IIS7 и далее, используйте только httpErrors, в соответствии с ответом rob: fooobar.com/info/154464/...

Просто добавьте, если вам не нужно/не хотите использовать ASP.NET для отображения страницы с ошибкой, я бы рекомендовал использовать статические HTML файлы для удаления зависимости от ASP.NET. Просто не забудьте пропустить какую-либо ведущую косую черту и использовать обратную косую черту для остальной части пути, например.

<error statusCode="404" prefixLanguageFilePath="" path="pages\404.html" responseMode="File" />

Установите responseMode="File", чтобы сохранить правильный код состояния.