404 Fehler elegant entschärfen
Geschrieben von: Patrick A. Lorenz Die wohl bekannteste unter den Fehlermeldungen eines Web-Servers ist Numero 404, die die ernüchternde Feststellung "Object not found" auf den Bildschirm des hoffnungsvollen Surfers zaubert. In diesem Artikel möchte ich Euch eine Lösung vorstellen, mit der Ihr die trostlose Fehlerseite gegen ein funktionales Script austauschen könnt, das Euch automatisch über den Fehler informiert und Euch somit die Möglichkeit gibt, schnell zu handeln und die schadhafte Stelle Eurer Website zu flicken. Die IdeeDer Internet Information Server bietet die Möglichkeit, für die komplette Website oder sogar für einzelne Verzeichnisse sog. Custom Error Messages festzulegen. Neben der 404 Fehlermeldung können dabei auch für nahezu alle anderen Fehlermeldungen alternative Texte oder je nach Art der Meldung ein Script hinterlegt werden. In unserem Fall soll bei der Anforderung einer nicht existierenden Seite unser Script aufgerufen werden. Dieses prüft an Hand des übergebenen HTTP-Referers, woher der Benutzer kommt. Die URL der angeforderten Seite erhält das Script per GET Parameter übergeben. Der Aufruf sieht wie folgt aus: http://www.mydomain.com/?404;http://www.mydomain.com/missing.asp Aus den explizit (URL) und implizit (Referer) erhaltenen Informationen lassen sich drei Fälle diagnostizieren:
In den ersten beiden Fällen wollen wir dem Benutzer lediglich eine entsprechende Meldung ausgeben, denn tatsächlich handeln können wir nicht. Im dritten Fall aber, haben wir den falschen Link selbst verbrochen und sollten daher schnellstmöglichst Abhilfe schaffen. Zunächst einmal müssen wir aber von dem Problem erfahren, am besten per eMail - Keine Frage, das erledigt unser MailParser aus dem Artikel Allgemeine MailParser Klasse für uns. VorbereitungBevor wir das Script implementieren, bedarf es ein wenig Vorbereitung... Zunächst legen wir in der Root unseres Servers eine neue, leere ASP-Seite mit dem Namen 404.asp an. Nun rufen wir den Konfigurationsdialog des Internet Information Servers auf. Unter Windows 2000 versteckt sich dieser als "Internet Services Manager" im Order "Administrative Tools" der Systemsteuerung. Jetzt rufen wir den Eigenschaftsdialog des gewünschten Servers auf und markieren die Lasche "Custom Errors". In der erschreckend langen Liste der möglichen Fehler findet sich auch Nummer 404. Nach einem Klick auf den Eigenschaften-Button und Auswählen der Option "URL" müssen wir nur noch die URL "/404.asp" eingeben und beide geöffneten Dialoge bestätigen. Ab sofort ist die Custom Error Message aktiv! Das ScriptNach einem kleinen Hinweis auf den Umstand dieser Fehlerseite in purem HTML wird das eigentliche Script interpretiert. Dabei wird zunächst die Ursprungsseite ermittelt, die in der Server-Variable HTTP_REFERER im Header des HTTP-Aufrufes vom Browser an den Server gesendet wird. referer = Request.ServerVariables("HTTP_REFERER") Nun stellen wir mit Hilfe der Ursprungsseite fest, wie der Benutzer auf die nicht existierende Seite gelangt ist. Es gibt dabei die weiter oben angesprochenen folgenden drei Möglichkeiten:
In dieser Reihenfolge wollen wir die Ursprungsseite auch ermitteln. Dazu verwenden wir ein einfaches IF-ELSEIF-ELSE-Konstrukt: If IsEmpty(referer) Then Message = "Bitte prüfen Sie die Schreibweise der Adresse." ... Es wurde kein Referer übergeben, der Benutzer hat die URL also vermutlich manuell eingegeben. ElseIf InStr(1, referer, Request.ServerVariables("HTTP_HOST"), _ vbTextCompare) = 0 Then Message = "Bitte informieren Sie den Webmaster der Seite " & referer & _ " über den fehlerhaften Link." ... Es wurde ein Referer übergeben, dieser liegt aber außerhalb des eigenen Internet-Angebotes. Wie haben wir das festgestellt? Nun, wenn er im eigenen Internet-Angebot liegen würde, würde er den Namen des Hosts beinhalten, den wir über die Servervariable HTTP_HOST ermittelt haben. Else Message = "Unser Webmaster wurde über den fehlerhaften Link " & _ " innerhalb unseres Internet-Angebotes informiert und " & _ " wird sich so schnell wie möglich mit dem Problem beschäftigen" url = Request.ServerVariables("QUERY_STRING") url = Mid(url, InStr(url, ";") + 1) Dim NewMail Set NewMail = New MailParser NewMail.AddVariable "referer", referer NewMail.AddVariable "url", url NewMail.Template = Server.Mappath("404.msg") Call NewMail.Send End If Wenn der Referer nicht leer ist und den Namen unseres eigenen Hosts enthält, dann ist uns wohl ein Fehler unterlaufen. In diesem Fall soll uns das Script mit Hilfe einer eMail informieren.
Wir verwenden dazu die Allgemeine MailParser-Klasse aus dem gleichnamigen Artikel. Der Klasse werden
zwei Variablen übergeben. Zum einen ist das der Referer, also die Ursprungsseite, die wir bereits weiter oben
ermittelt haben und zum anderen benötigen wir zur Korrektur natürlich die URL der nicht existierenden Seite.
Diese wird vom Internet Information Server per Parameter an das Script übergeben und zwar in folgender
Schreibweise: 404; Im Anschluß muß lediglich die individuelle Fehlerbeschreibung ausgegeben werden: <p> <% = Message %> <b> Vielen Dank für Ihr Verständnis! </b> </p> SchlußbemerkungCustom Error Pages ermöglichen uns, die tristen Fehlermeldungen des Internet Information Servers gegen funktionale Scripts einzutauschen, die nicht nur den Benutzer schonend informieren, sondern darüber hinaus einen Mehrwert zur Fehlerreduzierung bieten. Wer also eine ansprechende Website erstellen will, der sollte sich einmal mit diesem Thema beschäftigen. <schleichwerbung> Ein meines Erachtens gutes Beispiel für den Einsatz einer Custom Error 404 Message findet Ihr bei combit.de. Um die Effektivität zu testen würde ich vorschlagen, jeder, der auf der Website einen toten Link findet, bekommt von mir... Nein, soweit würde ich nicht gehen ;-), aber einen Blick lohnt die Website dennoch. </schleichwerbung> Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Allgemeine MailParser-Klasse mit ASPMail Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |