Перенаправление по умолчанию для ошибки 404

Я хочу добавить на свой веб-сайт ASP.net функцию, позволяющую всякий раз, когда в моем домене поступает запрос на неизвестный URL-адрес, пользователь перенаправлялся на мою страницу error_404.htm в корне приложения.

Например, если запрос http://www.mydomain.com/blahblahblah

Затем вместо возврата стандартной страницы ошибки 404 я хочу, чтобы она перенаправляла запрос на http://www.mydomain.com/error_404.htm

Обновите IIS версии 7.5 и .NET Framework версии 4.

Обновить /blah.aspx перенаправляет, а /blah нет


person Shekhar_Pro    schedule 19.12.2010    source источник
comment
О нет, пожалуйста, не надо. Когда я попал на неправильный URL, я хочу знать. Я также хочу иметь возможность редактировать то, что находится в моей адресной строке, если я сделал опечатку. Попросите страницу с ошибкой предоставить некоторую полезную информацию, но не перенаправлять.   -  person Quentin    schedule 19.12.2010
comment
Не делай это. Это невероятно раздражает.   -  person SLaks    schedule 19.12.2010
comment
Какую версию .net вы используете и версию IIS?   -  person Rippo    schedule 19.12.2010


Ответы (4)


Вот как вы настраиваете пользовательскую страницу ошибки 404 для запросов ASP.NET и не-ASP.NET:

<configuration>

   <system.web>
      <compilation targetFramework="4.0" />

      <customErrors mode="On" redirectMode="ResponseRewrite">
         <error statusCode="404" redirect="http404.aspx" />
      </customErrors>
   </system.web>

   <system.webServer>
      <httpErrors errorMode="Custom">
         <remove statusCode="404"/>
         <error statusCode="404" path="/http404.aspx" responseMode="ExecuteURL"/>
      </httpErrors>
   </system.webServer>

</configuration>

Как уже указывали другие, вы не должны использовать перенаправление HTTP для отправки пользователя на домашнюю страницу, это сбивает с толку не только пользователей, но и машины (например, поисковые системы). Важно использовать код состояния 404, а не код 3xx.

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

<%@ Page Language="C#" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>Not Found</title>
   <meta http-equiv="refresh" content="5;url=/"/>
</head>
<body>
   <h1>Not Found</h1>
   <p>Redirecting to Home...</p>
</body>
</html>
person Max Toro    schedule 25.12.2010
comment
Да, ваш код работает, но <error statusCode="404" path="/http404.aspx" responseMode="ExecuteURL"/>' just shows a blank page insted of my error page. However i fixed it with ‹error statusCode=404 path=error.aspx responseMode=Redirect/›` . Я знаю, что нарушаю ваше предложение кода 3xx HTTPp - person Shekhar_Pro; 26.12.2010
comment
@Shekhar_Pro: согласно http://www.iis.net/ConfigReference/system.webServer/httpErrors/error если вы используете ExecuteURL responseMode, путь должен быть относительным URL-адресом сервера, поэтому я использовал /http404.aspx, в вашем случае попробуйте /error.aspx или настройте, если приложение не находится в корне. - person Max Toro; 26.12.2010
comment
Я думаю, что у меня такая же проблема, я думаю. Объяснение stackoverflow.com/questions/22144777/< /а> - person Billa; 03.03.2014
comment
Я не мог понять, является ли этот подход дружественным к SEO? Как поисковые системы узнают, что это страница 404? мы должны добавить метатег 404 в заголовок страницы? Чтобы поисковые системы знали, что этот ресурс не найден и они не индексировали эту страницу? - person yogihosting; 13.01.2016

Вы можете указать своим пользователям пользовательский 404, включив раздел customErrors в свой файл web.config.

<customErrors mode="On" defaultRedirect="~/errors/GeneralError.aspx">
     <error statusCode="404" redirect="~/errors/PageNotFound.aspx" />
</customErrors>

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

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

person Jamie Dixon    schedule 19.12.2010
comment
Вы уверены, что пробовали именно это? Возможно, вы установили режим RemoteOnly, и в этом случае пользовательская страница ошибок будет отображаться только для удаленных пользователей. (т.е. не для вас локально). - person Jamie Dixon; 19.12.2010
comment
Я подозреваю, что /blah.aspx перенаправляет, а /blah нет, @Shekhar_Pro, можете ли вы это подтвердить? - person Rippo; 19.12.2010
comment
@Rippo, да, это так, спасибо, что указал мне на это. Тем не менее я хочу знать, является ли это bbfb, а не bbfb.aspx - person Shekhar_Pro; 19.12.2010
comment
Хорошо, ответьте на мой комментарий в своем посте относительно версии iis и версии .net. - person Rippo; 19.12.2010

В моем случае изменение «ResponseRewrite» на «ResponseRedirect» сработало:

Моя конфигурация файла MVC Webconfig:

   <system.web>
      <compilation targetFramework="4.0" />
      <customErrors mode="On" redirectMode="ResponseRedirect">
         <error statusCode="404" redirect="~/Home/Login" />
      </customErrors>
   </system.web>
</configuration>
person Rohit Arora    schedule 14.05.2015

Это работает для меня. Я просто включаю этот код между тегом <system.webServer> :

 <httpErrors errorMode="Custom">
      <remove statusCode="404"/>
      <error statusCode="404" path="~/Erro/PaginaNaoEncontrada.aspx" responseMode="Redirect"/>
    </httpErrors>
person A.Lopes    schedule 07.02.2018
comment
Да, это уже часть принятого ответа. Есть ли что-то новое, что вы хотите нам рассказать? - person Nico Haase; 07.02.2018
comment
Это немного отличается: почему тильда? (Это даже работает в httpErrors?) - person Diana; 27.09.2018