Пользовательская страница 404 при использовании модуля перезаписи URL IIS 7 - PullRequest
6 голосов
/ 30 апреля 2011

Я почти закончил переписывать и реорганизовывать / реструктурировать существующий веб-сайт, который получает много трафика. Я использовал модуль IIS 7 Url Rewrite для включения URL-адресов без расширения и для SEO, а также для перенаправления запросов на старые страницы на соответствующие страницы в новой структуре сайта. Все шло хорошо, но я смотрю, как настроить пользовательскую страницу 404, и я в тупике. Пока что я настроил следующий код в узле web.config:

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

Дело в том, что это работает, но не совсем! Если я перехожу на несуществующий URL-адрес, я получаю свою пользовательскую страницу 404, но в ответ на запрос вместо кода 404 я получаю код состояния 200 OK. Я возился с различными атрибутами узла httpErrors, но не повезло , Кто-нибудь знает, как показать пользовательскую страницу 404 И вернуть фактический код состояния 404?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 01 мая 2011

Чтобы наш собственный обработчик 404 работал, нам нужно было сделать следующее:

    <customErrors defaultRedirect="ErrorPage.aspx" mode="On">
        <error statusCode="500" redirect="ErrorPage.aspx" />
        <error statusCode="404" redirect="/404.aspx" />
        <error statusCode="403" redirect="ErrorPage.aspx" />
    </customErrors>

AND

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

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

1 голос
/ 14 июня 2012

Это сработало для меня, в коде позади 404.aspx:

    protected void Page_Load(object sender, EventArgs e)
    {
        this.Response.StatusCode = 404;
        this.Response.StatusDescription = "Not Found";
        this.Response.TrySkipIisCustomErrors = true;
    }
...