tobi85: 404 error_doc redirect

Hallo,

eine kurze Frage - ist es nicht möglich, bei einem 404 Fehler, einen 301 Redirect auszuführen? Ich hatte gerade alle möglichen Varianten überprüft, aber scheinbar blockt das der Browser.

Wenn es nicht geht - wäre ggf. ein Workaround über über eine Rewrite-Regel möglich?

  1. Hi,

    eine kurze Frage - ist es nicht möglich, bei einem 404 Fehler, einen 301 Redirect auszuführen?

    sicher ist das möglich - aber ist es auch vernünftig? Wenn ich eine Ressource anfordere, die es nicht gibt, dann ist mir eigentlich am liebsten, wenn mir das klar mitgeteilt wird - über den Statuscode und einen kurzen Info-Text.
    Es spricht allerdings nichts dagegen, auf dieser Fehlerseite ein paar Links anzubieten, so etwa im Stil von "Meinten Sie vielleicht ...?"

    Ich hatte gerade alle möglichen Varianten überprüft, aber scheinbar blockt das der Browser.

    Nein. Der kriegt gar nicht mit, was hinter den Kulissen läuft: Der Apache findet eine angeforderte Ressource nicht, greift ersatzweise nach seinem 404-ErrorDocument. Das ist zufällig ein PHP-Script, das seinerseits Status 301 und einen Location-Header setzt.

    Was immer du gemacht hast, vermutlich war's irgendwo falsch. Da du nicht verrätst, wie du es gemacht hast, kann man dir auch nicht gezielt helfen.

    So long,
     Martin

    --
    Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
    - Douglas Adams, The Hitchhiker's Guide To The Galaxy
    1. eine kurze Frage - ist es nicht möglich, bei einem 404 Fehler, einen 301 Redirect auszuführen?

      sicher ist das möglich - aber ist es auch vernünftig? Wenn ich eine Ressource anfordere, die es nicht gibt, dann ist mir eigentlich am liebsten, wenn mir das klar mitgeteilt wird - über den Statuscode und einen kurzen Info-Text.
      Es spricht allerdings nichts dagegen, auf dieser Fehlerseite ein paar Links anzubieten, so etwa im Stil von "Meinten Sie vielleicht ...?"

      +1. Genau das ist die "best practice" für unbekannte Ressourcenaufrufe. Sowohl für den User, wie auch Maschinen (z.B. Spider).

      Anders sieht die Sache aus, wenn man für die Ressourcenanforderung "weiß", dass es einen neueren, aktuelleren Link gibt. Dann ist 301 das Mittel der Wahl. Ein Klassiker hierbei wäre die Umstellung eines Shops auf "sprechende" URIs. Alt: www.example.org/shop/article.php?id=4711. Neu: www.example.org/hundefutter-mit-biopansen. Den alten Ressourcenaufruf würde man dann via 301 auf den Neuen schicken wollen - sofern das System diese "Intelligenz" hergibt.

      1. Hallo,

        unser URL-Schema haben wir neu aufgebaut und ich möchte nun, dass in dem 404 Error-Doc geprüft wird, ob es einen neueren Link gibt. Wenn ja, soll dieser weitergeleitet werden.

        Die Weiterleitung ist ja simpel und ich denke, falsch sollte diese nicht sein - oder?

        Es geht aber leider nicht.

        header("Location: $link", true, 301);

        1. Mahlzeit,

          unser URL-Schema haben wir neu aufgebaut und ich möchte nun, dass in dem 404 Error-Doc geprüft wird, ob es einen neueren Link gibt. Wenn ja, soll dieser weitergeleitet werden.

          okay, das ist wohl ein sinnvoller Anwendungsfall.

          header("Location: $link", true, 301);

          Das sieht für sich genommen richtig aus, ist aber nur ein Bröckchen des Ganzen.

          • Wie sieht die ErrorDoc-Direktive in der Serverkonfiguration aus?
          • Wird das ErrorDoc-Script überhaupt aufgerufen?
          • Wie sieht der Rest des ErrorDoc-Scripts aus? Erfolgt vielleicht vorher schon eine Ausgabe, so dass die header-Anweisung nicht mehr wirken kann?
          • Wie sehen die HTTP-Header aus, die der Server tatsächlich sendet (Beispiel)? Und ich meine nicht, wie sie aussehen sollten, sondern "in echt".

          So long,
           Martin

          --
          Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
          - Douglas Adams, The Hitchhiker's Guide To The Galaxy
          1. Hallo,

            also mal ganz simpel, um Fehler auszuschließen

            das ist meine PHP

            header("Location: /");
            exit;
            

            In der NGINX-Conf steht es wie folgt

            error_page 403 404 /errordoc.php;

            1. Hi,

              also mal ganz simpel, um Fehler auszuschließen

              das ist meine PHP

              header("Location: /");
              exit;
              

              und - wird das auch tatsächlich aufgerufen?

              In der NGINX-Conf steht es wie folgt

              Ah! kein gewöhnlicher Apache! Das hättest du aber von Anfang an sagen sollen, denn ich bin anhand der Indizien vom häufigsten Fall "Apache" ausgegangen.

              error_page  403 404              /errordoc.php;
              

              Ob das korrekt ist, kann ich natürlich nicht sagen, denn nginx kenn ich nur dem Namen nach.

              So long,
               Martin

              --
              Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
              - Douglas Adams, The Hitchhiker's Guide To The Galaxy
              1. Hallo,

                habe nochmals etwas getestet. War eine NGINX Einstellung. So geht es

                error_page  403 404 =  @errorpage;
                location @errorpage {
                	rewrite ^(.*)$ /errordoc.php;
                }