Thomas: Errorcode wie 404 - per Browser (z.B Javascript) abfragen? *träum*

Hallo erst mal,

Es passiert schon mal, dass eine Seite nicht gefunden wird. Es hängt dann wohl vom Webserver ab, was in diesem Falle angezeigt wird. Was ist aber, wenn ich z.B. in einem Frame eine Seite aufrufen will, der Webserver aber down ist? In diesem Falle wird eine Browser-Standard-Fehlermeldung bzw. -seite angezeigt. (Die Seite konnte nicht angezeigt werden, bla bla)

Ich würde das gerne per Script abfangen.

Damit man sich vorstellen kann, was ich will, schreibe ich mal einen erfundenen Code hin, den es leider nicht gibt, aber genau das machen würde was ich brauche... (nicht lachen! :)

returnCode = openPage("http://www.liefert-eine-fehlermeldung.de");
if(returnCode==404)      alert("Da haben wir's");
else if(returnCode==403) alert("Zugriff ist verboten!");

usw...

Ich bin vielleicht ein Träumer :) aber gäbe es eine Möglichkeit, sowas zu programmieren?

Danke im Vorraus
Thomas

  1. Programmieren braucht man da eigentlich nicht sehr viel.
    Schau doch mal nach, ob Du an dein .htaccess file im root verzeichnis kommst und dort die Einträge für die einzelnen Fehlermeldungen editieren kannst.
    Dort kannst Du beispielsweise sagen, dass bei einem 404-error eine bestimmte html-Datei aufgehen soll.
    In diese kannst Du dann ja leicht ein body onload="alert('nene');"
    reinschreiben und mit einem Meta Tag wieder auf die Startseite verweisen.

    Hoffe, ich konnte Dir weiter helfen.

    Grüße,

    Markus Mann

    http://www.db-sol.com

    Hallo erst mal,

    Es passiert schon mal, dass eine Seite nicht gefunden wird. Es hängt dann wohl vom Webserver ab, was in diesem Falle angezeigt wird. Was ist aber, wenn ich z.B. in einem Frame eine Seite aufrufen will, der Webserver aber down ist? In diesem Falle wird eine Browser-Standard-Fehlermeldung bzw. -seite angezeigt. (Die Seite konnte nicht angezeigt werden, bla bla)

    Ich würde das gerne per Script abfangen.

    Damit man sich vorstellen kann, was ich will, schreibe ich mal einen erfundenen Code hin, den es leider nicht gibt, aber genau das machen würde was ich brauche... (nicht lachen! :)

    returnCode = openPage("http://www.liefert-eine-fehlermeldung.de");
    if(returnCode==404)      alert("Da haben wir's");
    else if(returnCode==403) alert("Zugriff ist verboten!");

    usw...

    Ich bin vielleicht ein Träumer :) aber gäbe es eine Möglichkeit, sowas zu programmieren?

    Danke im Vorraus
    Thomas

    1. Hi ;-)

      Programmieren braucht man da eigentlich nicht sehr viel.
      Schau doch mal nach, ob Du an dein .htaccess file im root verzeichnis kommst und dort die Einträge für die einzelnen Fehlermeldungen editieren kannst.
      Dort kannst Du beispielsweise sagen, dass bei einem 404-error eine bestimmte html-Datei aufgehen soll.

      ... und wenn du jetzt noch ein bisschen programmieren kannst,
      uebergibst du statt einer HTML-Datei eben ein Script (Perl, php, etc.), dass dynamisch reagiert - z. B. mit einer Suche nach dem
      entsprechenden dateinamen/servernamen/teilen von beidem in einer
      internen suchmaschine oder so ...

      404s direkt an ein Script zu uebergeben ist IMO eleganter und
      performanter als Stefan's Loesung (da das script eben nur dann
      ausgefuehrt wird, wenn's die Datei nicht gibt, sonst wird der Link
      direkt aufgerufen, nachteil ist eben, dass das nur fuer lokale Links
      funktioniert, auf denen du .htacces- bzw. httpd.conf-Zugriff hast).

      Ich bin vielleicht ein Träumer :) aber gäbe es eine Möglichkeit, sowas zu programmieren?

      "I may be a dreamer, but I'm not the only one ..." ;-))

      CU
      Tzwenny

  2. Hallo Thomas,

    Ich bin vielleicht ein Träumer :) aber gäbe es eine Möglichkeit, sowas zu programmieren?

    In JavaScript leider nicht bislang, aber in Perl als CGI-Script.
    Solange du sonst nix hast, kannst du deine Links mal so setzen:

    <a href="http://www.teamone.de/cgi-local/url.pl?http://www.nicht-vorhanden.de/http://www.yahoo.de/">Link</a>

    Zuer Erklaerung:
    der Link ruft ein Script hier auf dem Server auf (http://www.teamone.de/cgi-local/url.pl). Das Script bekommt hinter dem Fragezeichen einen Parameterstring uebergeben. Der besteht aus zwei beliebigen URLs, getrennt durch einen Senkrechtstrich .
    Die erste der beiden URL ist die, die eigentlich verlinkt werden soll. Die zweite URL wird fuer den Fall aufgerufen, falls die erste nicht existiert. Man koennte die zweite URL also als eine Art "persoenliche 404-Abfangseite" betrachten. Man koennte als zweite URL z.B. eine eigene Seite angeben, die Auskunft darueber gibt, dass der eigentliche Link nicht mehr vorhanden ist. Oder auch einfach die URL der Seite, in der der Link steht - so bleibt der Anwender auf der Seite, wenn der Link nicht funktioniert.

    Und damit du auch glaubst, dass es wirklich funktioniert, hier zum Anklicken:

    http://www.teamone.de/cgi-local/url.pl?http://www.nicht-vorhanden.de/http://www.yahoo.de/

    Und wenn du selber CGI und Perl hast und den TeamOne-Server nicht noch mehr belasten willst als er es eh schon ist, dann kopier dir den Source:

    #!/usr/bin/perl

    $input = $ENV{'QUERY_STRING'};
    if($input eq "") {
      print "Content-type: text/html\n\n";
      print "<p>Fehler beim Aufruf</p>\n";
      exit(0);
    }
    $input =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    ($url,$errorurl) = split(//,$input);
    use LWP::Simple;
    if(head($url)) {
      print "Location: $url\n\n";
    }
    else {
      print "Location: $errorurl\n\n";
    }

    viele Gruesse
      Stefan Muenz

    1. Danke, ich denke das ist auf jeden Fall ein guter Ansatz :)
      Gruß
      Thomas

    2. Noch etwas... das CGI-Script ist nicht schlecht. Persönlich würde mich eine Lösung mit PHP3 sehr interessieren!

      1. Auch wenn Stefan es (noch) nicht mag ;-)

        Noch etwas... das CGI-Script ist nicht schlecht. Persönlich würde mich eine Lösung mit PHP3 sehr interessieren!

        http://www.php-center.de/artikel/show.php3?id=18

        Jan

    3. Hallo Stefan

      stellt sich nur die Frage : was passiert wenn der Server mit dem CGI
      auch mal offline ist , da kommt dann doch wieder der 404 :)
      Also letztendlich ist diese problem einfach nicht wirklich zu lösen ,
      sinnvoll finde ich es nur sich auf dem eigenen Server z.B. eigene
      404-Seiten zu machen die einem gleich ne Mail schicken wenn ne URL
      angefordert wird die nicht vorhanden ist , so das man das gleich
      fixen kann , alles andere ist zwar gut gedacht , aber nicht wirklich
      besonders sinnvoll.

      gruss
      Beldin

  3. ab, was in diesem Falle angezeigt wird. Was ist
    aber, wenn ich z.B. in einem Frame eine Seite
    aufrufen will, der Webserver aber down ist?
    In diesem Falle wird eine Browser-Standard-
    Fehlermeldung bzw. -seite angezeigt. (Die Seite
    konnte nicht angezeigt werden, bla bla)
    Ich würde das gerne per Script abfangen.

    Ich denke, der Punkt, mit dem die gesamte Diskussion
    steht oder fällt, ist, was genau Du unter "der Server
    ist down" verstehst.
    *Wenn* der Webserver tatsächlich "down" ist, dann
    liefert er Dir nicht nur *nicht* das angeforderte
    Dokument, sondern auch *keine* 404-Fehlerseite und
    auch sonst nichts. (Der Browser generiert dann lokal
    eine "timeout"-Meldung - diese müßtest Du eigentlich
    behandeln, aber das geht nicht, weil Du den Browser
    Deines Besuchers nicht umschreiben kannst.)

    Das heißt: Alle hier beschriebenen Ansätze, das Problem
    über ein CGI-Skript *auf demselben Server* zu lösen,
    sind zum Scheitern verurteilt.
    Wenn der Server nicht läuft, dann läuft er nicht.

    Falls Dein Problem allerdings *nur* war, tatsächliche
    404-Fehler abzufangen (welche der Webserver bei einem
    Zugriff auf ein nicht existierendes Dokument erzeugt),
    dann geht das am besten auf dem Webserver selbst.
    Je nachdem, was der ist bzw. kann, kann man dort mehr
    oder weniger elegante Lösungen bauen. Normalerweise ist
    "programmieren" hierbei nicht notwendig - eine entspre-
    chende Konfiguration des Servers reicht aus.
    (Apache: Anweisung "ErrorDocument".)