web-dev-qa-db-fra.com

Redirection par défaut pour l'erreur 404

Je souhaite introduire une fonctionnalité sur mon site Web ASP.net qui, chaque fois qu'une demande est reçue pour une URL inconnue sur mon domaine, l'utilisateur est redirigé vers ma page error_404.htm à la racine de l'application.

Par exemple, si la demande est http://www.mydomain.com/blahblahblah

Ensuite, au lieu de retourner la page d'erreur 404 standard, je souhaite qu'il redirige la demande vers http://www.mydomain.com/error_404.htm

Mise à jour IIS version 7.5 et .NET Framework version 4

Mise à jour /blah.aspx redirige mais pas /blah

27
Shekhar_Pro

Voici comment configurer une page d'erreur 404 personnalisée pour les demandes ASP.NET et non 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>

Comme d'autres l'ont déjà souligné, vous ne devez pas utiliser une redirection HTTP pour envoyer l'utilisateur à la page d'accueil, ce qui est source de confusion non seulement pour les utilisateurs, mais également pour les machines (par exemple les moteurs de recherche). Il est important d'utiliser le code d'état 404 et non un code 3xx.

Vous pouvez obtenir les fonctionnalités souhaitées en utilisant méta refresh sur 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>
62
Max Toro

Vous pouvez diriger vos utilisateurs vers un 404 personnalisé en incluant la section customErrors dans votre web.config.

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

Comme d'autres l'ont mentionné dans les commentaires ci-dessus, renvoyer les utilisateurs sur votre page d'accueil sera non seulement gênant, mais aussi déroutant sur le plan fonctionnel.

Mon conseil serait d'envoyer l'utilisateur sur une page qui lui donne des informations sur ce qui s'est passé et lui propose une étape suivante (parcourir d'autres produits, revenir à votre tableau de bord, etc.).

4
Jamie Dixon

Dans mon cas, changer "ResponseRewrite" en "ResponseRedirect" a fonctionné:

Mon fichier MVC Webconfig Configuration:

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

Cela fonctionne pour moi. Je viens d'inclure ce code entre le tag <system.webServer>:

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