2009-10-17 5 views
2

Comme certains d'entre vous ont des sites assez gros, je voulais avoir votre avis sur la gestion des 404. J'ai essayé des tas de configurations différentes avec .Net mais je ne peux jamais vraiment l'obtenir pour faire la bonne chose. J'ai toujours l'impression de recevoir une sorte de redirection ou de fausse en-tête, jamais une 404. C'est vraiment pénible car les moteurs de recherche n'obtiennent jamais la bonne réponse et continuent à frapper ces pages malgré qu'elles n'existent plus. À son tour cela signifie que je reçois des erreurs rapportées pour les pages que je connais n'existent plus. Je suis également assez confus sur la façon dont certaines requêtes sont traitées par .Net et certaines sont traitées par IIS.Manipuler mieux 404 dans .NET

Ma configuration actuelle est la suivante: IIS7, ASP.Net 3.5 App. J'ai la section des pages d'erreur personnalisée de l'installation web.config pour gérer les 404 en utilisant la nouvelle propriété redirectMode = "ResponseRewrite", en redirigeant vers une page d'erreur html. IIS est configuré pour gérer les 404 et les transférer vers la même page html. Elmah est configuré pour signaler ces problèmes par e-mail aussi.

Maintenant, quand j'essaie l'adresse suivante http://www.severnside.com/document.aspx (une page qui n'existe pas), .net gère l'erreur et affiche une réponse 200. Évidemment cela devrait être un 404. Quand j'essaye http://www.severnside.com/document j'obtiens un 404 correct mais l'erreur a été manipulée par IIS. Est-il possible d'avoir .Net gérer cette erreur aussi, donc Elmah peut ramasser l'erreur?

Ce serait génial si je pouvais avoir un aperçu des configurations utilisées par d'autres pour gérer ce type de scénario correctement.

Merci

Répondre

8

au lieu d'utiliser la page html statique, vous pouvez utiliser la page dynamique qui définira le code d'état correct:

404.aspx:

<%@ Page Language="C#" %> 
<script runat="server"> 
protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.StatusCode = 404; 
} 
</script> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    Not found 
    </div> 
    </form> 
</body> 

web.config :

<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm" redirectMode="ResponseRewrite"> 
    <error statusCode="404" redirect="404.aspx" /> 
</customErrors> 
+0

Merci pour les commentaires. Dans mon cas il s'est avéré qu'il y a deux côtés à l'épée si vous voulez l'installer correctement pour une application .NET. Vous avez besoin d'une page aspx avec le code de réponse défini dans le code tel que votre exemple, puis définissez IIS pour pointer toutes les erreurs 404 vers ce fichier. Vous devez également définir des erreurs personnalisées pour pointer vers le même fichier, bien que .Net lui-même renvoie le message 404. Merci pour votre aide –

Questions connexes