Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

404 Fehler elegant entschärfen

Geschrieben von: Patrick A. Lorenz
Kategorie: ASP Tricks

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 Idee

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:

  • Der Benutzer gibt manuell eine falsche Adresse in den Browser ein, in diesem Fall wird kein HTTP-Referer übergeben.
  • Der Benutzer folgt einem Link innerhalb eines anderen Internet-Angebotes auf unser Internet-Angebot, der HTTP-Referer enthält die URL der externen Seite.
  • Oder aber, der Benutzer folgt einem Link innerhalb unseres eigenen Internet-Angebotes, es gibt also einen fehlerhaften Link auf unseren eigenen Seiten. In diesem Fall enthält der HTTP-Referer die URL der eigenen Seite.

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.

Vorbereitung

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!

Das Script

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:

  • Manuelle Eingabe
  • Link in anderem Internet-Angebot
  • Link in eigenem Internet-Angebot

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;. Per InStr und Mid schneiden wir die Fehlernummer kurzer Hand ab und übergeben lediglich die URL an die MailParser-Klasse.

Im Anschluß muß lediglich die individuelle Fehlerbeschreibung ausgegeben werden:

 <p>
  <% = Message %> <b> Vielen Dank für Ihr Verständnis! </b>
 </p>

Schlußbemerkung

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>

Download des Codes

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

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

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