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
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>
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.).
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>
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>