Christian: WICHTIG! Statt Parameter nur URL in der Adressleiste !????

Hallo,

ich habe folgendes Problem:

ich habe eine PHP-Präsenz mit Hilfe von Parameterübergabe realisiert.
Nun soll jedoch in der Adresszeile für den User nur eine reine URL OHNE Parameter angezeigt werden. Intern sollte jedoch weiter mit den Parametern gearbeitet werden können, um nicht alle Klassen umschreiben zu müssen.
Gibt es eine Möglichkeit, eine "virtuelle" URL in der Adresszeile des Browsers einzufügen und die alte zu esetzen. Wie gesagt. Die Architektur mit Parametern soll / muss erhalten bleiben.
(geht das evtl. direkt mit PHP - oder kann man das mit JS erreichen?)

Ich hoffe jemand hat da eine geniale Idee!??? :-)

Vielen Dank im Vorraus!

Ciao

Christian

  1. Hallo,

    Das kannst Du mit einem Frameset erreichen.

    Gruß Markus

    1. Das kannst Du mit einem Frameset erreichen.

      Hallo,

      nein leider nicht, da ich keine Frames verwende (bzw. darf).
      Die Änderung soll auch nur aus ästhetischen Gründen erfolgen :-((
      Jedenfalls soll der URL-String im´n der Browseradresszeile durch einen anderen String ersetzt werden. Das ist das eigentliche Problem.

      =>statt
      http://test.de/index.php?abt="zentral/profile"&inc="test"&language="de"

      soll dann
      http://test.de/zentral/profile/test_de.inc.php

      in der Adresszeile stehen!

      Gibt es da nicht eine relativ simple Möglichkeit diese einfach zu ersetzen?

      Danke

      Christian

  2. Moin!

    ich habe eine PHP-Präsenz mit Hilfe von Parameterübergabe realisiert.
    Nun soll jedoch in der Adresszeile für den User nur eine reine URL OHNE Parameter angezeigt werden. Intern sollte jedoch weiter mit den Parametern gearbeitet werden können, um nicht alle Klassen umschreiben zu müssen.
    Gibt es eine Möglichkeit, eine "virtuelle" URL in der Adresszeile des Browsers einzufügen und die alte zu esetzen. Wie gesagt. Die Architektur mit Parametern soll / muss erhalten bleiben.
    (geht das evtl. direkt mit PHP - oder kann man das mit JS erreichen?)

    Die Parameter verstecken geht auf drei Wegen:

    1. Frameset um alles drumrum legen. Dafür kriegst du Schläge, weil keiner mehr Unterseiten bookmarken kann, und die Links auf der Seite werden natürlich auch in der Statuszeile angezeigt (die Parameter sind also nicht wirklich versteckt) - wenn du die Statuszeile auch noch umdefinierst, kriegst du noch mehr Schläge, weil die ist mir (und manchen anderen Leuten im Forum) heilig. :)

    2. POST-Formulare benutzen. Ist aber ziemlich nervig, weil dann ständig das "Formular wirklich abschicken?"-Fenster nachfragt, und du müßtest alle Links auf Javascript umstellen, die dann "document.formularname.submit()" aufrufen, anstatt ordentliche Links zu sein - die Sache mit der dann relativ sinnlosen Aussage der Statuszeile noch nicht mal mitgerechnet.

    3. Du benutzt URL-Rewriting auf dem Server. Das ist so ziemlich die eleganteste und genialste Möglichkeit, deine wahren Parameter in der URL zu verstecken. Aber die ganze Sache wird dadurch unübersichtlich!

    Theoretische Vorgehensweise:
    Du hast die URL /index/kaffeehaus/gruen/blanko/login/irgendwas

    Durch das URL-Rewriting wird diese aber in folgende echte URL umgesetzt:
    /index.php?bereich=kaffeehaus&farbe=gruen&formular=blanko&aktion=login&anderedefinition=irgendwas

    Deine Links würden dann immer schön zu den "Fake"-URLs gehen, und mit einem festen Schema in Parameter umgesetzt werden.

    Wie gesagt: Die Sache kann unübersichtlich werden. Du solltest vor dem Rewriting prüfen, ob nicht eine wahre URL übergeben wurde (z.B. für jede Art von Formular recht wichtig), falls du noch irgendwelche Links vergessen hast, umzuarbeiten.

    Mehr Infos zum URL-Rewriting gibt dir die Seite zu "mod_rewrite" in der Apache-Dokumentation.

    - Sven Rautenberg

    1. Hi,

      ich möchte die Parameter nicht nur verstecken, sondern daraus eine URL ohne Prameter aufbauen.

      D.h. etwas einfacher erklärt, dass ich lediglich den Text der Adresszeile durch eine selbstzusammengebaute Adresszeile ersetzen will.

      Gibt es eine möglichkeit diesen STring in der Adresszeile des Browsers zu ersetzen - OHNE dabei die Seite neu zu laden? Also die Adresse nur virtuell zu ändern?

      Ciao

      Christian

      1. Moin!

        ich möchte die Parameter nicht nur verstecken, sondern daraus eine URL ohne Prameter aufbauen.

        Wenn du keine Parameter willst, dann benutze keine.

        Wenn du alles unter einer URL abwickeln willst, benutze ein Frameset.

        Wenn das alles nur aus kosmetischen Gründen geschieht, hätte das vorher ins Site-Design einfließen müssen. Und ich finde es auch reichlich übertrieben, sich um sowas Gedanken zu machen.

        Entweder du strickst deine Parameter irgendwie um mit mod_rewrite, oder du hast an der URL, die angezeigt wird, irgendein Skript, was dann Parameter hinzufügt und das eigentliche Skript aufruft, oder du läßt das ganze, weil es nicht geht.

        D.h. etwas einfacher erklärt, dass ich lediglich den Text der Adresszeile durch eine selbstzusammengebaute Adresszeile ersetzen will.

        Gibt es eine möglichkeit diesen STring in der Adresszeile des Browsers zu ersetzen - OHNE dabei die Seite neu zu laden? Also die Adresse nur virtuell zu ändern?

        Keine Chance. Die Adreßzeile ist dazu da, die Adresse des Dokuments des obersten Fensters anzuzeigen. Eben deshalb sind Frames so unbeliebt, weil man normal nur die Startseite bookmarken kann, die angezeigt wird, aber keine Unterseiten.

        - Sven Rautenberg

      2. Moin,

        Gibt es eine möglichkeit diesen STring in der Adresszeile des Browsers zu ersetzen - OHNE dabei die Seite neu zu laden? Also die Adresse nur virtuell zu ändern?

        Ja, mit Frames.... ach hätte ich ja fast vergesen, du bist an der Lösung ja gar nicht interessiert. ;-)

        Sven: Du brauchst nicht gleich mit einem Apache-Modul auf den armen Christian zu schiessen. skript.php/bla/blubb mit $PATH_INFO tut genauso gut.

        Christian: Eine unschöne Alternative vielleicht noch: Du verwendest Sessions (mit Cookie, damit ja nicht an den URL angehängt wird ;-) und lässt deine Links genauso wie vorher. Am Anfang jeder Seite speicherst du die Parameter und was du sonst noch so brauchst in die Session und machst dann sofort header("Location: http://mein.sauberer.script.url"); exit(); wobei das Skript sich dann die Paramter aus der Session holt.
        Der Benutzer merkt davon nichts, ausser vielleicht dass die Server-Requests plötzlich doppelt so lange dauern und er nicht mehr vernünftig in mehreren Browsern arbeiten kann und dass alles zusammenbricht sobald er sich erdreistet die Cookies abzuschalten.

        --
        Henryk Plötz
        Grüße aus Berlin

        1. Hi Henryk,

          Sven: Du brauchst nicht gleich mit einem Apache-Modul auf den armen
          Christian zu schiessen.
          skript.php/bla/blubb mit $PATH_INFO tut genauso gut.

          ich hätte diese 4. Möglichkeit ebenfalls vorgeschlagen.
          Soweit ich das einschätzen kann, bedeutet dies aber, alle PHP-Skripte
          anzupassen (bisher namentlich benannte Parameter mit "bla" und "blubb"
          füttern).

          Außerdem ist es semantisch gesehen ein Abstieg von Schlüsselwort- auf
          Stellungsparameter, was zumindest die Pflege der Software nicht einfacher
          macht und ggf. auch noch inhaltliche Probleme mit sich bringt (es gibt
          ja beispielsweise mengenwertige CGI-Parameter bei Checkboxen usw. - nicht
          alles läßt sich problemlos auf diese Verzeichnis-Pseudostruktur umschrei-
          ben).

          Obwohl die mod_rewrite-Lösung intellektuell wahrscheinlich die schwierigste
          sein dürfte (und mod_rewrite den Apache auch nicht wirklich kleiner macht ;-),
          dürfte sie bei geeigneter Anwendung die mächtigste sein und mit hoher Wahr-
          scheinlichkeit eine Anpassung der Anwendung selbst ersparen.

          Allerdings würde ich den Auftraggeber in diesem Fall fragen, ob er das
          Preis-/Leistungs-Verhältnis einer solchen rein ästhetischen Änderung für
          vertretbar hält.
          Ich selbst würde die Zeit lieber in Content und Usability stecken wollen.

          Viele Grüße
                Michael

          1. Moin

            Obwohl die mod_rewrite-Lösung intellektuell wahrscheinlich die schwierigste
            sein dürfte (und mod_rewrite den Apache auch nicht wirklich kleiner macht ;-),
            dürfte sie bei geeigneter Anwendung die mächtigste sein und mit hoher Wahr-
            scheinlichkeit eine Anpassung der Anwendung selbst ersparen.

            Na komm, ein bisschen Fantasie hast du doch auch? :)
            FastAlleBisherigenAnsätzeVermischmasch-variante:
            Also die Skripte müssten insoweit umgeschrieben werden (Dateiübergreifendes Suchen & Ersetzen ist dein Freund) dass sie ihre Parameter (in der bisherigen Form) an ein Skript übergeben, nennen wir es mal my_rewrite.php:
            my_rewrite.php?bla=blubb&bli=blo
            my_rewrite sendet nun einen redirect an den Client, der diesen auf multiplexer.php lenkt (man kann natürlich einen ästhetischeren Namen nehmen und mit ein bisschen .htaccess-Magie auch noch das .php wegzaubern, so dass es wie ein Verzeichnis aussieht) und die Parameter in den Pfad hängt: multiplexer.php/bla/blubb/bli/blo.
            Dieser Name erscheint jetzt in der Addresszeile des Browsers. multiplexer.php seinerseits sucht sich jetzt die Parameter zusammen und ruft intern das eigentliche vorherige Skript auf und übergibt ihm die Parameter, wahlweise über $bla=$HTTP_GET_VARS["bla"]="blubb"; .... include("skript.php"); exit(); oder mit virtual();. Dabei kann es dann auch ein bisschen Intelligenz implementieren und somit von reinen Positionsparameter wegkommen (entweder so wie ich angedeutet habe, oder mit noch mehr Intelligenz, etwa weil 5eabc966ef9ab119945de92c6faaa41a mit an Sicherheit grenzender Wahrscheinlichkeit eine Session-ID sein wird, und nicht der Vorname der Lieblingskatze des Users die er in einem Formular eingeben sollte) womit PHP dann eindeutig noch mächtiger als mod_rewrite sein dürfte, das doch afaik 'nur' RegExps kann. Das könnte man jetzt auch noch mit ein paar Cookies, Sessions oder Referern würzen, gut umrühren und ein paar Stunden köcheln lassen.

            Achja: Es ist zwar nicht besonders aufwendig (5 bis 15 Minuten Schreibarbeit, ca.), aber auch nicht besonders schön -> nimm Frames oder lass es bleiben. Sollte das doch jemand von dir verlangen, reparier nicht das Skript (das ist nicht kaputt), sondern diesen jemand.

            --
            Henryk Plötz
            Grüße aus Berlin