Claudius L.: Aktuellen URI herausfinden

Hallo ihr da draußen! ;)

Ich bin auf der Suche nach einer zuverlässigen Möglichkeit, per PHP den aktuellen URI herauszufinden. Bisher habe ich mich da immer auf $_SERVER['REQUEST_URI'] verlassen, doch gestern gelesen, dass dies nicht unbedingt funktioniert, da auch Requests mit relativen Pfaden gestellt werden könnten.
Dies wäre für meine Verwendungszwecke fatal, da ich $_SERVER['REQUEST_URI'] eigentlich eben immer nur dann verwende, wenn ich unbedingt eine absolute Adresse benötige. Zum Beispiel (in verarbeiteter Form) im <base href="[…]" />-Tag oder bei Weiterleitungen per header('Location: […]').
Per Google bin ich dann auf den Artikel How to find the full URL of the page in PHP in a platform independent and configuration independent way gestoßen, doch frage ich mich, ob dies tatsächlich die einzige, beste und zuverlässigste Lösung des Problems ist, oder ob ihr möglicherweise bessere Ideen habt.
Ich bin auf eure Antworten gespannt,

Gruß,

Claudius

  1. echo $begrüßung;

    Ich bin auf der Suche nach einer zuverlässigen Möglichkeit, per PHP den aktuellen URI herauszufinden. Bisher habe ich mich da immer auf $_SERVER['REQUEST_URI'] verlassen, doch gestern gelesen, dass dies nicht unbedingt funktioniert, da auch Requests mit relativen Pfaden gestellt werden könnten.

    Nicht gegenüber dem Webserver. Der kennt den Kontext der am Client angezeigten Webseite und deren URL nicht. Der Browser muss als Request immer eine absolute Angabe senden.

    echo "$verabschiedung $name";

    1. Hallo!

      Nicht gegenüber dem Webserver. Der kennt den Kontext der am Client angezeigten Webseite und deren URL nicht. Der Browser muss als Request immer eine absolute Angabe senden.

      Ja, das klingt logisch. Auf die Idee hätte ich eigentlich auch selbst kommen können (naja „können“ offensichtlich nicht, aber „sollen“…). Danke dir für die Antwort.

      Gruß,

      Claudius

  2. Moin!

    Ich bin auf der Suche nach einer zuverlässigen Möglichkeit, per PHP den aktuellen URI herauszufinden. Bisher habe ich mich da immer auf $_SERVER['REQUEST_URI'] verlassen, doch gestern gelesen, dass dies nicht unbedingt funktioniert, da auch Requests mit relativen Pfaden gestellt werden könnten.

    Diese Info ist falsch.

    Der Browser sendet IMMER eine absolute Pfadangabe an den Server - es ist ausschließlich die Aufgabe des Browsers, aus der Kombination von aktueller URL plus relativer URL eine neue absolute URL für den nächsten Request zusammenzusetzen.

    Per Google bin ich dann auf den Artikel How to find the full URL of the page in PHP in a platform independent and configuration independent way gestoßen, doch frage ich mich, ob dies tatsächlich die einzige, beste und zuverlässigste Lösung des Problems ist, oder ob ihr möglicherweise bessere Ideen habt.

    Das Skript hat ein paar eher fragwürdige Details, arbeitet aber im Groben alle denkbaren Sonderfälle ab, die beim Zusammenbau wirklich beliebiger URLs auftreten könnten.

    Allerdings: Wie wahrscheinlich ist es, dass jemand, ohne es zu wissen, einen HTTP-Server auf einem Nicht-Standard-Port laufen läßt? Allein die Nichtbeachtung dieses Details halbiert das vorgestellte Skript um ein Drittel.

    Ich halte es dennoch für überflüssig.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Hallo!

      Diese Info ist falsch.

      Sehr beruhigend, das spart mir eine Menge Anpassungsarbeit …
      Ich hatte die Info von hier:

      „$_SERVER['REQUEST_URI']
      The actual URI used in HTTP protocol (after GET or POST) to make the request. For example if you access this site with the following command:
      GET / HTTP/1.0
      Host: blog.taragana.com

      Then $_SERVER['REQUEST_URI'] will be /.

      However is you access the same page using:
      GET /index.php HTTP/1.0
      Host: blog.taragana.com

      Then $_SERVER['REQUEST_URI'] will be /index.php.“

      Kann ich also davon ausgehen, dass dieses Zitat falsch ist und $_SERVER['REQUEST_URI'] immer einen absoluten URI enthält? Oder hast du nur widersprochen, dass auch relative Requests gesendet werden können, nicht aber, dass $_SERVER['REQUEST_URI'] nicht immer einen absoluten URI enthält?

      Allerdings: Wie wahrscheinlich ist es, dass jemand, ohne es zu wissen, einen HTTP-Server auf einem Nicht-Standard-Port laufen läßt? Allein die Nichtbeachtung dieses Details halbiert das vorgestellte Skript um ein Drittel.

      Ich halte es dennoch für überflüssig.

      Da kommt mir wie ganz oben schon erwähnt deine Entschätzung ziemlich gelegen, weil ich mir das dann sparen kann.

      Dank und Gruß,

      Claudius

      1. Moin!

        „$_SERVER['REQUEST_URI']
        The actual URI used in HTTP protocol (after GET or POST) to make the request. For example if you access this site with the following command:
        GET / HTTP/1.0
        Host: blog.taragana.com

        Then $_SERVER['REQUEST_URI'] will be /.

        However is you access the same page using:
        GET /index.php HTTP/1.0
        Host: blog.taragana.com

        Then $_SERVER['REQUEST_URI'] will be /index.php.“

        Kann ich also davon ausgehen, dass dieses Zitat falsch ist und $_SERVER['REQUEST_URI'] immer einen absoluten URI enthält? Oder hast du nur widersprochen, dass auch relative Requests gesendet werden können, nicht aber, dass $_SERVER['REQUEST_URI'] nicht immer einen absoluten URI enthält?

        Dieses Zitat ist absolut korrekt, und es schildert exakt das Verhalten.

        REQUEST_URI enthält immer die Angabe der angeforderten Ressource, minus irgendwelcher Domainangaben, Ports oder Protokolle. Also den gesamten Pfad, startend mit dem Root "/".

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. Hallo!

          Dieses Zitat ist absolut korrekt, und es schildert exakt das Verhalten.

          REQUEST_URI enthält immer die Angabe der angeforderten Ressource, minus irgendwelcher Domainangaben, Ports oder Protokolle. Also den gesamten Pfad, startend mit dem Root "/".

          Da hast du mir gerade aber ein ganz schön dickes Brett, das ich vor dem Kopf hatte, abgeschraubt.
          Die ganze Fragestellung war völlig sinnfrei, weil ich in Gedanken irgendwie $_SERVER['REQUEST_URI'] und $_SERVER['SERVER_NAME'] vermixt habe und so Verhalten erwartet habe, dass es natürlich nicht gibt. Damit hat sich das hier wohl erledigt …

          Gruß,

          Claudius