Werner: Header Location: mitgabe eines # in der URL

Hallo Gemeinde,

Bitte gebt mir einen Tipp wo ich hier meinen Denkfehler hab:
header('location: /xmas#friends');

Eigendlich sollte ja in der Adressleiste des Browsers nun http://meinedomain/xmas#friends stehen - tut es aber nicht.

Wo denke ich hier falsch??
Danke

  1. Hi,

    Bitte gebt mir einen Tipp wo ich hier meinen Denkfehler hab:
    header('location: /xmas#friends');

    Erster Fehler: Keinen vollstaendigen URL inkl. Protokollangabe hinter Location: angegeben - was aber vorgeschrieben ist.

    Eigendlich sollte ja in der Adressleiste des Browsers nun http://meinedomain/xmas#friends stehen - tut es aber nicht.

    Wo denke ich hier falsch??

    Der Hash-Part eines HTTP-URLs ist etwas rein clientseitiges - der wird bei einem Request nicht mit uebertragen. Und ihn auf dem umgekehrten Weg dem Client aufzwingen zu wollen, duerfte vermutlich auch nicht funktionieren, wie du ja gemerkt hast.

    MfG ChrisB

    1. Hallo

      Bitte gebt mir einen Tipp wo ich hier meinen Denkfehler hab:
      header('location: /xmas#friends');

      Erster Fehler: Keinen vollstaendigen URL inkl. Protokollangabe hinter Location: angegeben - was aber vorgeschrieben ist.

      Bis hierher kann ich dir folgen

      Der Hash-Part eines HTTP-URLs ist etwas rein clientseitiges - der wird bei einem Request nicht mit uebertragen. Und ihn auf dem umgekehrten Weg dem Client aufzwingen zu wollen, duerfte vermutlich auch nicht funktionieren, wie du ja gemerkt hast.

      Aber das verstehe ich nun nicht mehr.
      Ist der Hash-Part nicht gleichzusetzen mit einem Anker? Und ich habe schon oft solche Anker verlinkt...

      Liebe Grüße mbr

      1. Hi,

        Der Hash-Part eines HTTP-URLs ist etwas rein clientseitiges - der wird bei einem Request nicht mit uebertragen. Und ihn auf dem umgekehrten Weg dem Client aufzwingen zu wollen, duerfte vermutlich auch nicht funktionieren, wie du ja gemerkt hast.

        Aber das verstehe ich nun nicht mehr.
        Ist der Hash-Part nicht gleichzusetzen mit einem Anker?

        Doch, genau.

        Und ich habe schon oft solche Anker verlinkt...

        Ja - aber der Name dieses Ankers wurde dabei nicht mit an den Server uebertragen.

        Ob du nun auf
        http://example.org/dokument.html
        oder auf
        http://example.org/dokument.html#bestimmterAnker
        verlinkst - der Browser wird in beiden Faellen die gleiche Anfrage an den Server senden.
        Erst wenn er die Antwort erhalten hat, unterscheidet sich dann das Verhalten: Im ersten Fall wird er (Browser) das Dokument ganz normal "von Anfang an" anzeigen - im zweiten wird er darin nach einen Element mit name/id "bestimmterAnker" suchen, um dieses dann "anzuspringen".
        Der Ankername verlaesst dabei das kleine Universum des Clients aber nicht, der Server erlangt keinerlei Kenntnis davon.
        Und deshalb ist auch Werners vorhaben, den Anker, fuer den der Client sich interessieren soll, mit einer _serverseitigen_ Technik (PHP/Location-Header) beeinflussen zu wollen, keine Erfolgsaussicht zu bescheinigen.
        _Wenn_ der Client sich im Antwortdokument fuer einen Anker interessieren soll, dann muss diese Entscheidung auch dort fallen - entweder, indem direkt auf eine Ressource _mit_ Hash-Part im URL verlinkt wird, oder in dem das Anspringen nachtraeglich nach dem Erhalt des Dokumente bspw. per Javascript ausgeloest wird.
        PHP und sonstige serverseitigen Techniken sind und bleiben jedenfalls aussen vor.

        MfG ChrisB

        1. Hi Leute,

          Danke für die Antworten.
          Ich bin grad selbst draufgekommen wo der Fehler gelegen hat.

          Also Original und falsch war es so:
          header('location: /xmas#friends');

          Es wurde kein Anker mitgegeben

          Mach ich aber
          header('location: /xmas/#friends');
          sieht die Sache schon viel besser aus und es macht das was es soll!

          Teufel im Detail :-)

          Danke Euch dennoch!!
          lg.
          Werner

          1. Hi,

            Also Original und falsch war es so:
            header('location: /xmas#friends');

            Es wurde kein Anker mitgegeben

            Doch.

            Mach ich aber
            header('location: /xmas/#friends');

            Damit hast du den Namen der eigentlichen Ressource geaendert - der Anker-Part ist gleich geblieben.

            sieht die Sache schon viel besser aus und es macht das was es soll!

            Wieder was gelernt - meinerseits.
            War mir noch nicht bewusst, dass die Browser das in einem Location-Header beruecksichtigen.

            MfG ChrisB

            1. Hi ChrisB

              Wieder was gelernt - meinerseits.
              War mir noch nicht bewusst, dass die Browser das in einem Location-Header beruecksichtigen.

              MfG ChrisB

              Man lernt eben doch nie aus :-)
              Aber sag mal isses eigendlich sehr schlimm wenn ich meine header so aufbaue wie oben beschrieben?

              Ich mein ich habs auf der Seite fast ausschließlich nur mit header('location: /und_da_halt_die_datei');

              lg.
              Werner

              1. Hi,

                Aber sag mal isses eigendlich sehr schlimm wenn ich meine header so aufbaue wie oben beschrieben?

                Ich mein ich habs auf der Seite fast ausschließlich nur mit header('location: /und_da_halt_die_datei');

                Damit verlaesst du dich nur auf die "Gutmuetigkeit" und Fehlerkorrektur des Clients, daraus und aus der Adresse, die er aktuell vorliegen hat, wieder einen gueltigen und vollstaendingen URL zusammenzusetzen - aber nichts garantiert, dass das alle Clients so machen (und bedenke, es gibt auch andere Clients als nur Browser).

                MfG ChrisB

                1. Damit verlaesst du dich nur auf die "Gutmuetigkeit" und Fehlerkorrektur des Clients, daraus und aus der Adresse, die er aktuell vorliegen hat, wieder einen gueltigen und vollstaendingen URL zusammenzusetzen - aber nichts garantiert, dass das alle Clients so machen (und bedenke, es gibt auch andere Clients als nur Browser).

                  MfG ChrisB

                  AHA!
                  Supershit....
                  Na dann muß ich mich dahinterklemmen und das in allen betreffenden php-Files ändern!

                  Danke jetzt hab ichs kapiert warum es so sein sollte!!!!

                  lg.
                  Werner

  2. Hello,

    Eigendlich sollte ja in der Adressleiste des Browsers nun http://meinedomain/xmas#friends stehen - tut es aber nicht.
    Wo denke ich hier falsch??

    Dass der Client das beim request abschneidet, hat Dir ja schon jemand erzählt.

    Mit Metatag

    <html>
      <head>
         <meta http-equiv="refresh" content="0; URL=>http://meinedomain/xmas#friends">
         <script type="text/javascript">
            window.location.href="http://meinedomain/xmas#friends";
         </script>
      </head>
      <body>
      </body>
    </html>

    oder auch mit JavaScript, dass Du dem Client in einem Zwischendokument schickst, geht es auch meistens.

    Ob man das dann auch validiern sollte, überlasse ich Deinem Geschmack

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)