IIS7 custom 404 не отображается - PullRequest
41 голосов
/ 11 июля 2011

создал новый веб-сайт 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Страницы ошибок ничего не показывает, хотя у меня там была запись.

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

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

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

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

Ответы [ 4 ]

110 голосов
/ 12 июля 2011

ответ должен был использовать

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

и не иметь никаких системных.web customErrors

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

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

6 голосов
/ 08 октября 2013
<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>
0 голосов
/ 16 августа 2018

У меня была проблема с моим веб-приложением, и я решил ее, закомментировав строку перенаправления:

    <httpErrors>
        <remove statusCode="403" subStatusCode="-1" />
        <!--<error statusCode="403" prefixLanguageFilePath="" path="C:\inetpub\redirectSItoHttps.htm" responseMode="File" />-->
    </httpErrors>

В IIS, allowAbsolutePathsWhenDelegated (в редакторе конфигурации -> system.webServer / httpErrors) был заблокирован, и я не могу изменить значение false на true.

0 голосов
/ 26 июля 2017

Для IIS7 и далее, используйте только httpErrors, согласно ответу робота: https://stackoverflow.com/a/6661699

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

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

Установите responseMode="File" для сохранения правильного кода состояния.

...