2010-11-29 6 views
8

In meiner asp.net Website Ich habe benutzerdefinierte Fehlerseiten definiert, wie in meiner web.config-Datei folgen.ASP.NET benutzerdefinierte Fehlerseite für 404 kehrt 302 für HTTP-Status

<customErrors mode="On" defaultRedirect="~/defaulterror.htm" > 
<error statusCode="404" redirect="~/404.htm" /> 

Wenn Datei nicht richtig gefunden wird 404.htm Seite angezeigt werden, aber das Problem ist, wenn ich verfolgen Fiddler es 302 als HTTP-Status zurückgibt code.This für Suchmaschinen-Indizierung Seite aufgrund dieser Menge ist ein großes Problem von defekten Links wurden in letzter Zeit immer noch auf meiner Website indiziert. Wie kann ich die Rückgabe von 302 als HTTP-Statuscode für Datei nicht gefunden Fehler verhindern und 404 für Datei nicht gefunden Fehler zurückgeben. Ich benutze asp.net 3.5.

+1

See [Dieser Beitrag] (http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404 - Sie werden die richtigen Ergebnisse erhalten -in-asp-net-mvc/7967759 # 7967759). Dies ist ein Beispiel für eine benutzerdefinierte 404-Fehlerseite, die ASP.Net-MVC-Filterattribute verwendet. Diese Lösung vermeidet auch die 302/200-Nachrichten an den Browser. Der Browser erhält eine 404-Antwort. –

Antwort

15

Nach über dieses Problem googeln, so scheint es, dass dies das Standardverhalten ist, dass Microsoft ASP.NET für die Situation zur Verfügung stellt. Das ist sehr schlecht für SEO. Eine Arbeit um ich gefunden ist zu prüfen, ob die angeforderte Datei in einem HTTP-Handler vorhanden ist (oder Global.asax-Datei) oder Verwendung:

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

Wenn die angeforderte Datei nicht existiert, dann schreiben Sie den Anforderungspfad zu einem file not found page (bei Verwendung eines HTTP-Handlers oder global.asax), löschen Sie die Serverfehler auf dem 404-Fehlerseite-Code und fügen Sie der Antwort manuell einen 404-Fehlerkopf hinzu, anstatt darauf zu warten, dass der Server dies tut.

Server.ClearError(); 
Response.Status = "404 Not Found"; 
Response.StatusCode = 404; 
+0

redirectMode Attribut wurde in .NET FW 4.0, mindestens hinzugefügt! –

+0

Das ist perfekt. Die URL bleibt auf derselben Seite, aber jetzt bekomme ich den richtigen 404-Statuscode. – kd7iwp

+1

hey können Sie dieses vollständige Beispiel machen. Ich verstehe das nicht. – MonsterMMORPG

0

Wie Sie wahrscheinlich bereits die 302 Antwort wissen, wird verwendet, um den Anrufer zu raten, dass die angeforderte Ressource an einen anderen Ort verschoben wurde.

Wenn Sie sehen, in Fiedler, der 302 Code http zurückgegeben wird, ist es auch eine ‚Standort‘ Deklaration im Header? Zum Beispiel:

HTTP/1.1 302 Found 
Location: http://www.yoursite.com/somewhere/blah.htm 

Es scheint, dass Sie haben können ‚etwas‘ auf dem Webserver, der die 404 zurückkehrt und ersetzt diese mit 302 der abfängt. Ich weiß, das ist nicht viel weiter zu gehen, aber ich würde vorschlagen, dass Sie sich die IIS-Konfiguration für die Website ansehen.

-2

Die Lösung war noch einfacher .. Bitte beachten Sie auch meine Antwort hier über: http://blog.hebbink.com/post/2010/12/14/NET-custom-404-error-page-returns-302-for-http-status.aspx

+23

und damit die Bedeutung der Einbeziehung der Lösung in der Antwort (wie auch den Link) - sie nicht mehr scheinen, einen Blog zu haben . –

+7

Wie ironisch ist, dass der Link in dieser Antwort auf ..... 404 Seite nicht gefunden :) –

+4

Und natürlich gibt es nicht den 404 Fehlercode zurück ... –

2

In ASP.NET 4.0 Sie redirectMode="ResponseRewrite" verwenden können schöner Fehlerseiten und den richtigen HTTP-Code zu senden.

0

Wenn Sie das folgende in der 404-Seite Code hinter hinzufügen.

Seite 404.aspx

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.StatusCode = 404; 
} 
Verwandte Themen