Geschrieben von: Patrick A. Lorenz
Kategorie: ASP Tricks
This printed page brought to you by AlphaSierraPapa
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.
Der 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.
Bevor 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!
Nach 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>
Custom 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>
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000608.zip
Allgemeine MailParser-Klasse mit ASPMail
http:/www.aspheute.com/artikel/20000602.htm
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.