Пользовательские ошибки веб-сервера IIS7 - работают локально, но не при публикации в производство - PullRequest
11 голосов
/ 23 мая 2011

Я создаю новый сайт с пользовательскими страницами ошибок.Я настроил свой web.config и настроил все мои страницы.

Когда я запускаю локально и вырабатываю ошибки (страница не найдена, это простая), все это работает хорошо.Но когда я публикую на своем рабочем сервере Windows Server 2008 R2 и захожу на неверную страницу, он все равно переносит меня на страницу ошибки IIS7 по умолчанию.все там):

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0"/>
    <customErrors mode="On" defaultRedirect="~/ErrorGeneral">
      <error statusCode="400" redirect="~/ErrorBadRequest" />
      <error statusCode="401" redirect="~/ErrorUnathorized" />
      <error statusCode="402" redirect="~/ErrorPaymentRequired" />
      <error statusCode="403" redirect="~/ErrorForbidden" />
      <error statusCode="404" redirect="~/ErrorItemNotFound" />
      <error statusCode="405" redirect="~/ErrorMethodNotAllowed" />
      <error statusCode="406" redirect="~/ErrorNotAcceptable" />
      <error statusCode="412" redirect="~/ErrorPreconditionFailed" />
      <error statusCode="500" redirect="~/ErrorInternalServerError" />
      <error statusCode="501" redirect="~/ErrorNotImplemented" />
      <error statusCode="502" redirect="~/ErrorBadGateway" />
    </customErrors>
    </system.web>
</configuration>

Я делаю что-то простое неправильно?Отличается ли это от Windows Server 2008 R2?

РЕДАКТИРОВАТЬ: я обнаружил, что проблема, которая является дополнительной информацией в файле web.config, выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    <customErrors mode="On" defaultRedirect="~/ErrorGeneral">
      <error statusCode="400" redirect="~/ErrorBadRequest" />
      <error statusCode="401" redirect="~/ErrorUnathorized" />
      <error statusCode="402" redirect="~/ErrorPaymentRequired" />
      <error statusCode="403" redirect="~/ErrorForbidden" />
      <error statusCode="404" redirect="~/ErrorItemNotFound" />
      <error statusCode="405" redirect="~/ErrorMethodNotAllowed" />
      <error statusCode="406" redirect="~/ErrorNotAcceptable" />
      <error statusCode="412" redirect="~/ErrorPreconditionFailed" />
      <error statusCode="500" redirect="~/ErrorInternalServerError" />
      <error statusCode="501" redirect="~/ErrorNotImplemented" />
      <error statusCode="502" redirect="~/ErrorBadGateway" />
    </customErrors>
    </system.web>
    <system.webServer>
        <httpErrors>
            <remove statusCode="502" subStatusCode="-1" />
            <remove statusCode="501" subStatusCode="-1" />
            <remove statusCode="500" subStatusCode="-1" />
            <remove statusCode="412" subStatusCode="-1" />
            <remove statusCode="406" subStatusCode="-1" />
            <remove statusCode="405" subStatusCode="-1" />
            <remove statusCode="403" subStatusCode="-1" />
            <remove statusCode="401" subStatusCode="-1" />
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" prefixLanguageFilePath="" path="/Pages/ErrorItemNotFound.aspx" responseMode="ExecuteURL" />
            <error statusCode="401" prefixLanguageFilePath="" path="/Pages/ErrorUnauthorized.aspx" responseMode="ExecuteURL" />
            <error statusCode="403" prefixLanguageFilePath="" path="/Pages/ErrorForbidden.aspx" responseMode="ExecuteURL" />
            <error statusCode="405" prefixLanguageFilePath="" path="/Pages/ErrorMethodNotAllowed.aspx" responseMode="ExecuteURL" />
            <error statusCode="406" prefixLanguageFilePath="" path="/Pages/ErrorNotAcceptable.aspx" responseMode="ExecuteURL" />
            <error statusCode="412" prefixLanguageFilePath="" path="/Pages/ErrorPreconditionFailed.aspx" responseMode="ExecuteURL" />
            <error statusCode="500" prefixLanguageFilePath="" path="/Pages/ErrorInternalServerError.aspx" responseMode="ExecuteURL" />
            <error statusCode="501" prefixLanguageFilePath="" path="/Pages/ErrorNotImplemented.aspx" responseMode="ExecuteURL" />
            <error statusCode="502" prefixLanguageFilePath="" path="/Pages/ErrorBadGateway.aspx" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</configuration>

Ответы [ 2 ]

19 голосов
/ 23 мая 2011

По умолчанию IIS7 перехватывает коды состояния HTTP, такие как 4xx и 5xx, сгенерированные приложениями далее по конвейеру.

Вы можете указать IIS просто пропустить существующий ответ, не заменяя его собственной страницей ошибок:

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

Для получения дополнительной информации см .:

Ошибки HTTP

0 голосов
/ 23 мая 2011

Помогает ли это ?

Интересно, нужно ли вам так же регистрировать пути к пользовательским ошибкам?

...