Перенаправление по умолчанию для ошибки 404 - PullRequest
27 голосов
/ 19 декабря 2010

Я хочу добавить функциональность на моем веб-сайте 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 не

Ответы [ 4 ]

62 голосов
/ 25 декабря 2010

Вот как вы настраиваете пользовательскую страницу ошибки 404 для запросов ASP.NET и не-ASPP.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>
4 голосов
/ 19 декабря 2010

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

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

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

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

2 голосов
/ 14 мая 2015

В моем случае изменение «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>
1 голос
/ 07 февраля 2018

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

 <httpErrors errorMode="Custom">
      <remove statusCode="404"/>
      <error statusCode="404" path="~/Erro/PaginaNaoEncontrada.aspx" responseMode="Redirect"/>
    </httpErrors>
...