Andreas: automatisch einen Parameter an jeden Link anhängen

Hallo!
Ich überlege gerade, wie man über eine ganze Webseite an jeden Link automatisch einen Parameter, z.B. sprache=DE anhängen kann? Es gibt ja viele größere Seiten, die sowas machen, und ich kann mir nicht vorstellen, das sowas schon beim Schreiben der Seite manuell gemacht wird.
Also im Prinzip genau sowas, was PHP mit PHPSESSID macht, wenn TRANS-SID eingeschaltet ist, und keine Cookies verwendet werden.
Hab nur keien Ahnung, wo ich überhaupt danach suchen soll, PHP, was mir da am besten geeignet für vorkommt, da die Seiten eh geparst werden, da kenn ich keine Möglichkeit für sowas(außer das in die Session zu screiben, aber das will ich bewußt nicht).

Irgendein Apache Modul? Aber die verändern ja nicht die Ausgabe des Dokumentes selbst, oder? Meißt doch nur den Header, nur das reicht ja nicht!
Außerdem weiß ich nicht, wie man das dann auf eine andere Sprache umschalten kann, also den Parameter über-/um-schreiben.
Und ist ja immer ein Unterschied ob erster oder zweiter Parameter, wegen '?' bzw. '&'!

Jemand ne Idee?

Viele Grüße
Andreas

  1. Halihallo Andreas ;)

    Ich überlege gerade, wie man über eine ganze Webseite an jeden Link automatisch einen Parameter, z.B. sprache=DE anhängen kann? Es gibt ja viele größere Seiten, die sowas machen, und ich kann mir nicht vorstellen, das sowas schon beim Schreiben der Seite manuell gemacht wird.

    Für dieses Problem ist mir keine Automatisierung bekannt (leider).
    Ich hab nur folgenden Vorschlag:

    Die Generierung von URL einer Funktion zu überlassen (dann musst du lieder _jeden_ Link durch diese Funktion ersetzen). Diese Funktion macht dann nix anderes, als der übergebenen URL die Daten anzuhängen. Die Daten übergiebst du mit einem assoziativen Array (Hash). Da du sprache => 'DE' nicht jedesmal übergeben willst, kannst du diese in einem "Default-Hash" einmal pro Programmaufruf setzen und die Funktion wird dir diese dann jedesmal automatisch an die URL hängen.

    zur Funktionsweise:

    set_default( 'sprache' => 'DE' );
    generate_url( '/cgi-bin/hello.pl', 'hello'=>'world', 'text'=>'msg' );

    generiert dir dann folgende URL:

    /cgi-bin/hello.pl?hello=world&text=msg&sprache=DE

    Viele Grüsse

    Philipp

    1. Hi Philipp!

      Das das ganze so geht ist mir klar, aber gerade das wollte ich verhindern. Da greife ich lieber auf ne Session-Lösung zurück, auchg wenn ich das sonst nicht brauche. Interessiert mich nur, ob das bei dynamischen Seiten da nicht doch eine andere Möglichkeit gibt.

      Für Michael scheint das ganze ein "Klacks" zu sein, bin schon ganz gespannt wie man das "ganz einfach" macht:

      http://forum.de.selfhtml.org/?m=83789&t=14809

      Grüße
      Andreas

      1. Moin!

        Das das ganze so geht ist mir klar, aber gerade das wollte ich verhindern. Da greife ich lieber auf ne Session-Lösung zurück, auchg wenn ich das sonst nicht brauche. Interessiert mich nur, ob das bei dynamischen Seiten da nicht doch eine andere Möglichkeit gibt.

        mod_rewrite könnte helfen.

        Wenn du die Sprache in den Dateipfad verfrachtest (üblicherweise ja eigentlich kein Problem, Links auf einer deutschen Seite gehen üblicherweise auf deutsche Seiten - und nur die Links zur Sprachumschaltung gehen auf fremdsprachige Seiten), dann kannst du den Pfad zur Ressource auseinanderpflücken und vollkommen neu zusammensetzen.

        Beispielsweise:
        http://www.server.tld/de/der_echte/pfad_zur/seite.php
        wird umgesetzt zu
        http://www.server.tld/der_echte/pfad_zur/seite.php?sprache=de

        Und dein PHP-Skript wertet entsprechend aus und setzt möglicherweise entsprechende Links. Relative Links sind natürlich am günstigsten, und der Sprung zu einer anderssprachigen Seite dürfte auch kein Thema sein.

        Ich finde übrigens mod_rewrite eine sehr elegante Lösung für dein Problem - das ist genau dafür da, einer URL, also im Prinzip einer sehr virtuellen Ressource, eine reale Herkunft auf dem Server zuzuordnen. Das kann es durchaus auch verschleiernd wirken, du könntest also beispielsweise .html-Dateien verlinken, aber in Wirklichkeit eben PHP-Skripte einsetzen, ohne daß irgendwer das sieht oder sehen kann.

        - Sven Rautenberg

        1. Hallo!

          mod_rewrite könnte helfen.

          Der Gendanke war mir auch schon gekommen, aber das hat ja nix mit dynamischen Seiten zu tun, womit Michael seine Lösung verknüpft hatte, oder? Außerdem wird hier ja kein Paramterer angehängt, wie gesagt, sowas wie die PHPSESSID. Gibt es dafür gar keine Möglichkeit?

          Wenn du die Sprache in den Dateipfad verfrachtest (üblicherweise ja eigentlich kein Problem, Links auf einer deutschen Seite gehen üblicherweise auf deutsche Seiten - und nur die Links zur Sprachumschaltung gehen auf fremdsprachige Seiten), dann kannst du den Pfad zur Ressource auseinanderpflücken und vollkommen neu zusammensetzen.

          Beispielsweise:
          http://www.server.tld/de/der_echte/pfad_zur/seite.php
          wird umgesetzt zu
          http://www.server.tld/der_echte/pfad_zur/seite.php?sprache=de

          Problem hierbei: Wenn ich jetzt in der Datei

          http://www.server.tld/der_echte/pfad_zur/seite.php

          ein Bild verlinke, relativ zu

          http://www.server.tld/images/hallo.gif, dann wäre das wohl: ../../images/hallo.gif.

          Das ist ja schön, aber die Datei wird nicht gefunden, wenn ein /de/ dazwischensteht. Dagegen könnte ich ja nur absolute Links nehmen, was auch Nachteile hat. Wie würde man das denn am elegantesten umgehen? Oder ich mache ein Verzeichnis auch auf der richtigen Seite mit
          http://www.server.tld/SPRACHE/der_echte/pfad_zur/seite.php
                                ^^^^^^^^
          und das kann ich dann auch umschreiben in /de/, doof ist nur, das das ja in jedem Link berücksichtigt werden muß! Dann müßte ich tatsächlich alle Links umschreiben, damit die auf das Verzeichnis /de/ verweisen, oder auf /en/... aber irgendwie ist das nicht optimal.

          Und dein PHP-Skript wertet entsprechend aus und setzt möglicherweise entsprechende Links. Relative Links sind natürlich am günstigsten, und der Sprung zu einer anderssprachigen Seite dürfte auch kein Thema sein.

          Wie gesagt ist das mit den relativen Links auch so eine Sache, Sprache müßte ja in jedem Link stehen, sonst funktioniert es nicht, absolut ist dasselbe Problem!

          Ich finde übrigens mod_rewrite eine sehr elegante Lösung für dein Problem - das ist genau dafür da, einer URL, also im Prinzip einer sehr virtuellen Ressource, eine reale Herkunft auf dem Server zuzuordnen. Das kann es durchaus auch verschleiernd wirken, du könntest also beispielsweise .html-Dateien verlinken, aber in Wirklichkeit eben PHP-Skripte einsetzen, ohne daß irgendwer das sieht oder sehen kann.

          Ja, da gibt es viele interessante Sachen, kenne mich leider noch nicht wirklich damit aus. Aber gibt es kein Apache-Modul, womit Seiten (vor allem die Links darin) verändert werden können?

          Grüße
          Andreas

          • Sven Rautenberg
          1. Hi,

            mod_rewrite könnte helfen.
            Der Gendanke war mir auch schon gekommen, aber das hat ja nix mit
            dynamischen Seiten zu tun, womit Michael seine Lösung verknüpft
            hatte, oder?

            es gibt nicht immer nur eine Lösung. mod_rewrite dürfte genau das
            sein, was für die vorliegende Problemstellung geeignet ist.

            Problem hierbei: Wenn ich jetzt in der Datei
            http://www.server.tld/der_echte/pfad_zur/seite.php
            ein Bild verlinke, relativ zu
            http://www.server.tld/images/hallo.gif, dann wäre das wohl:
            ../../images/hallo.gif.
            Das ist ja schön, aber die Datei wird nicht gefunden, wenn ein /de/
            dazwischensteht. Dagegen könnte ich ja nur absolute Links nehmen,
            was auch Nachteile hat. Wie würde man das denn am elegantesten
            umgehen?

            So, daß es funktioniert. ;-)

            Im Ernst: Dein Beispiel ist ein Fall, wo Du mit relativen Links
            _immer_ Probleme bekommen wirst.
            Wer sagt Dir denn, daß Dein bisher in Ebene 2 liegendes Verzeichnis
            nicht pltzlich nach Ebene 3 verschoben wird?

            Relative Links sind nur innerhalb von inhaltlich zusammengehörigen
            Bäumen sinnvoll, die (ziemlich sicher) nicht auseinander gerissen
            werden.

            Oder ich mache ein Verzeichnis auch auf der richtigen Seite mit
            http://www.server.tld/SPRACHE/der_echte/pfad_zur/seite.php
                                  ^^^^^^^^
            und das kann ich dann auch umschreiben in /de/, doof ist nur, das
            das ja in jedem Link berücksichtigt werden muß!

            Nicht, wenn alle Links, die umgeschrieben werden _sollen_, relative
            Links sind. Dann mußt Du einfach gar nichts tun - nachdem der erste
            Link erfolgreich umgeschrieben wurde, passen alle folgenden von allein.

            Wie gesagt ist das mit den relativen Links auch so eine Sache,
            Sprache müßte ja in jedem Link stehen,

            Nein - in keinem.
            Das ist ja genau der Trick: Die Sprache ist eine Verzeichnisebene
            _außerhalb_ dessen, wo Du relative Links verwenden darfst.

            Ja, da gibt es viele interessante Sachen, kenne mich leider noch
            nicht wirklich damit aus. Aber gibt es kein Apache-Modul, womit
            Seiten (vor allem die Links darin) verändert werden können?

            Sicher - mod_includes ist ein solches. Du meintest aber "wo ich
            bestimmen kann, wie der Inhalt verändert wird" - und die Antwort
            darauf würde wahrscheinlich "schreib Dir selbst eines" lauten.

            Weil Du aber keine Module auf normalen Webspace-Angeboten instal-
            lieren darfst, hatte ich die Einbindung eines Handlers, der Deine
            Aufgabe auch lösen würde, erwähnt und gzip_cnc als Beispiel dafür
            genannt.

            Viele Grüße
            <img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.gif" border=0 alt=""> Michael

            1. Hallo!

              es gibt nicht immer nur eine Lösung. mod_rewrite dürfte genau das
              sein, was für die vorliegende Problemstellung geeignet ist.

              Ja das stimmt wohl!

              Nicht, wenn alle Links, die umgeschrieben werden _sollen_, relative
              Links sind. Dann mußt Du einfach gar nichts tun - nachdem der erste
              Link erfolgreich umgeschrieben wurde, passen alle folgenden von allein.

              Ja, so sollte man das machen. Habe etwas falsch gedacht. Werde das mal probieren. Danke Dir. Vielleicht dann doch lieber die Links dynamisch erstellen, mal schaun.

              Grüße
              Andreas