kocs: Dynamisches in Statisches!?

hallo,

ich würde gerne dynamische url's in statische umschreiben (für suchmaschine und adressleiste).
nun habe ich schon gelesen,dass man das ganz gut mit mod_rewrite in einer .htaccess machen kann.
folgendes habe ich daher schontestweise ausprobiert:

RewriteEngine On
RewriteRule ^test.html$ index.php?section=$0

wenn ich also .../test.html in die adressleiste (bzgl. lokalem server) eingebe, erscheint ganz korrekt der eigentlich dynamische inhalt unter dem deckmantel von test.html in der adressleiste.

wie,und jetzt kommt die frage, kann ich nun aber erreichen, dass nur die statische test.html auch dann in der adressleiste angezeigt wird, wenn ich die seite über den entsprechenden link aufrufe?
mit der obigen RewriteRule würde bisher leider noch test.html?section=$0 in der adressleiste auftauchen.

gruß

  1. Hi,

    wie,und jetzt kommt die frage, kann ich nun aber erreichen, dass nur die statische test.html auch dann in der adressleiste angezeigt wird, wenn ich die seite über den entsprechenden link aufrufe?

    In dem der "entsprechende" Link auch dem entspricht, auf das du wirklich verlinken willst.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Hi,

      wie,und jetzt kommt die frage, kann ich nun aber erreichen, dass nur die statische test.html auch dann in der adressleiste angezeigt wird, wenn ich die seite über den entsprechenden link aufrufe?

      In dem der "entsprechende" Link auch dem entspricht, auf das du wirklich verlinken willst.

      MfG ChrisB

      also irgendwie kannich mit der antwort noch nicht so viel anfangen.
      der punkt ist, dass der inhalt der hinter der test.html stecken soll über den menu-link dynamisch erzeugt wird, also eigentlich so aussieht: index.php?section=0 .
      wenn ich nun auf den link klicke der mir dieses erzeugt, so soll natürlich der eigentlichinhalt im fenster und aber test.html inder adressleiste erscheinen.
      gruß

      1. Hi,

        der punkt ist, dass der inhalt der hinter der test.html stecken soll über den menu-link dynamisch erzeugt wird, also eigentlich so aussieht: index.php?section=0 .

        ja, das ist der Punkt. Fixe ihn.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. ja, das ist der Punkt. Fixe ihn.

          uff, also die seite soll schon unbedingt dynamisch bleiben.
          gruß

          1. Hi,

            ja, das ist der Punkt. Fixe ihn.

            uff, also die seite soll schon unbedingt dynamisch bleiben.

            Hat ja auch keiner was dagegen.

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“
            1. Hi,

              ja, das ist der Punkt. Fixe ihn.

              uff, also die seite soll schon unbedingt dynamisch bleiben.

              Hat ja auch keiner was dagegen.

              MfG ChrisB

              also, ich besitze überhaupt noch keine fitness in der materie. gibt es vielleicht konkretere lösungsvorschläge? mit den bisherigen hinweisen kann ich tatsache gar nichts anfangen.
              gruß

              1. Hi,

                zitiere bitte endlich mal vernuenftig!

                also, ich besitze überhaupt noch keine fitness in der materie. gibt es vielleicht konkretere lösungsvorschläge? mit den bisherigen hinweisen kann ich tatsache gar nichts anfangen.

                Wenn du auf test.html verlinken willst, dann schreibe das ins href-Attribut eines Links hinein.

                Wie du das "dynamisch" machst, sofern denn noetig - das ueberleg dir halt mal selber.

                MfG ChrisB

                --
                „This is the author's opinion, not necessarily that of Starbucks.“
                1. Wenn du auf test.html verlinken willst, dann schreibe das ins href-Attribut eines Links hinein.

                  Wie du das "dynamisch" machst, sofern denn noetig - das ueberleg dir halt mal selber.

                  also die "test.html" gibt es doch eigentlich gar nicht. wie soll ich sie denn dann ins entsprechende href-Attribut schreiben. "test.html" kann von mir aus auch "blablabla" heißen. diese zeichenkette soll nur eben IMMER in adressleiste stehen anstatt der eigentlich dynamischen vaiante index.php?section=0.
                  sorry,ich will ja keinem auf den geist gehen. aber ich habe nun mal keinen ansatz, da ich gerade mal ein wenig halbwissen über die sprachen habe.
                  also geht es noch genauer?
                  gruß

                  1. Hi,

                    also die "test.html" gibt es doch eigentlich gar nicht.

                    doch, Du hast sie in Deiner Server-Konfiguration erzeugt.

                    wie soll ich sie denn dann ins entsprechende href-Attribut schreiben.

                    Es bietet sich an, mit den Fingern die Tastatur entsprechend zu benutzen.

                    "test.html" kann von mir aus auch "blablabla" heißen. diese zeichenkette soll nur eben IMMER in adressleiste stehen anstatt der eigentlich dynamischen vaiante index.php?section=0.

                    Dann solltest Du NIE eine andere URI als die von Dir bevorzugte "test.html" oder "blablabla" veröffentlichen. Auch nicht im href-Attribut eines Links.

                    Cheatah

                    --
                    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                    X-Will-Answer-Email: No
                    X-Please-Search-Archive-First: Absolutely Yes
                    1. also,
                      ich versuch's nochmal:
                      ich habe eine homepage (die wird im folgenden der einfachheit halber aufs wesentliche reduziert). die besteht aus einer index.php und verschiedenen test0.php,test1.php etc. in den test.php's steht nun der inhalt, der über eine dynamische navigation in der index.php ins entsprechende "inhalts-tag" geladen wird. dabei wird der parameter section mit werten belegt. $section=0 für den inhalt aus test0.php und $section=1 für den inhalt aus test1.php. möchte ich also den inhalt aus test0.php auf der homepage sehen, klicke ich den test0-link in der navigation und es wird die seite index.php?section=0 ausgegeben, analoges gilt für test1. es ist also eine ganz simple dynamische homepage.
                      schließlich wird beim klick auf den link für den inhalt aus test0.php logischerweise auch die zeichenkette index.php?section=0 in der adresseleiste stehen (und für test1 eben index.php?section=1).
                      ich hätte nun aber gern,dass statt "index.php?section=0" "test0.html" oder meinetwegen "test0" in der adresseleiste steht, und zwar auch dann,wenn ich eben den inhalt aus test0.php über den navigationslink lade.

                      mit
                      "RewriteEngine On
                      RewriteRule ^test0.html$ index.php?section=$0"

                      in der .htaccess würde da bis jetzt "test0.html?section=0"in der adressleiste stehen. wie kann ich nun also verhindern, dass "?section=0" in dieser zeichenkette erscheint.
                      am besten wäre ein weg in der .htaccess

                      gruß

                      1. sorry,hab aus versehen 2mal gepostet.

                        1. Hallo,
                          schreib deine Links doch einfach alle in test*.html um, dann hast du was du brauchst, das haben dir bis jetzt alle versucht zu sagen...

                          die Adressleiste des Browsers wird immer das anzeigen, was du verlinkst.
                          was der Server für ne Adresse bekommt, ist was anderes (in dem Fall der GET-Parameter)

                          gruß thomas

                          1. also, nun funktioniert es. der hinweis mit dem GET-Parameter hat mich dann doch auf die spur gebracht. mir war irgendwie nicht klar, dass bei

                            RewriteEngine On
                            RewriteRule ^test0.html$ index.php?section=$0

                            "section" über "$0" schon mit dem wert im ersten argument, also "^test0.html$", belegt wird, anstatt mit "0" selbst. mein wertevorrat für section waren ja gerade die zahlen 0,1,etc.; daher hat mich diese syntax leicht irritiert.
                            da man mod_rewrite in .htaccess (zumindest in dem fall) anscheinend nur als verlagerte wertzuweisung des entsprechenden parameters benutzt, frag ich mich nun aber, ob man das nicht auch mit eins,zwei zeilen in php erledigen könnte!
                            gruß

                            1. Hi,

                              mir war irgendwie nicht klar, dass bei

                              RewriteEngine On
                              RewriteRule ^test0.html$ index.php?section=$0

                              "section" über "$0" schon mit dem wert im ersten argument, also "^test0.html$", belegt wird, anstatt mit "0" selbst. mein wertevorrat für section waren ja gerade die zahlen 0,1,etc.; daher hat mich diese syntax leicht irritiert.

                              "Normalerweise" wuerde man den explizit gesuchten Teil im Suchausdruck mit runden Klammern "gruppieren", so dass man darauf anschliessend direkt Zugriff hat:

                              RewriteRule ^test([0-9]+).html$ index.php?section=$1

                              [0-9] ist die Klasse der Zeichen 0-9 (eckige Klammern stehen fuer "Zeichenklasse").
                              Das Zeichen + dahinter bedeutet "mindestens ein oder beliebig viele Male".
                              Und das, worauf dieser Teilausdruck zutrifft, bekommst du durch die runden Klammern in $1 zur Verfuegung gestellt.
                              Das funktioniert jetzt fuer test0.html, test2.html, test4711.html - mit nur einer Rewrite-Regel. Bisschen praktischer, oder?
                              (Und das Sonderzeichen ., welches hier aber kein Sonderzeichen sein soll, sondern lediglich "Punkt" bedeuten soll, wird durch einen vorangestellten \ "maskiert".)

                              da man mod_rewrite in .htaccess (zumindest in dem fall) anscheinend nur als verlagerte wertzuweisung des entsprechenden parameters benutzt, frag ich mich nun aber, ob man das nicht auch mit eins,zwei zeilen in php erledigen könnte!

                              Nein, mod_rewrite dient nicht nur als "verlagerte Wertzuweisung".
                              Ohne mod_rewrite wuerde gar kein test0.html gefunden, also auch gar kein PHP ausgefuehrt.

                              MfG ChrisB

                              --
                              „This is the author's opinion, not necessarily that of Starbucks.“
                              1. RewriteRule ^test([0-9]+).html$ index.php?section=$1

                                [0-9] ist die Klasse der Zeichen 0-9 (eckige Klammern stehen fuer "Zeichenklasse").
                                Das Zeichen + dahinter bedeutet "mindestens ein oder beliebig viele Male".
                                Und das, worauf dieser Teilausdruck zutrifft, bekommst du durch die runden Klammern in $1 zur Verfuegung gestellt.
                                Das funktioniert jetzt fuer test0.html, test2.html, test4711.html - mit nur einer Rewrite-Regel. Bisschen praktischer, oder?
                                (Und das Sonderzeichen ., welches hier aber kein Sonderzeichen sein soll, sondern lediglich "Punkt" bedeuten soll, wird durch einen vorangestellten \ "maskiert".)

                                ich hab jetzt folgendes gefunden:
                                RewriteRule ^([^.]+)/?$ index.php?section=$0 [L]
                                klappt auch und ist wohl noch freizügiger mit zeichenketten, bis auf ".", wenn ich das richtig verstehe.

                                zudem hab ich ein bisschen herumprobiert und festgestellt, dass sowohl "section=$0", als auch "section=$1" funktioniert; wieso das?
                                gruß

                                1. Hi,

                                  ich hab jetzt folgendes gefunden:
                                  RewriteRule ^([^.]+)/?$ index.php?section=$0 [L]
                                  klappt auch und ist wohl noch freizügiger mit zeichenketten, bis auf ".", wenn ich das richtig verstehe.

                                  Ja, ist nur die Frage, ob man so viel "Freizuegigkeit" auch braucht, bzw. ueberhaupt will.
                                  Grundsaetzlich sollte man sowas so umfassend wie noetig, aber so restriktiv wie moeglich halten.

                                  zudem hab ich ein bisschen herumprobiert und festgestellt, dass sowohl "section=$0", als auch "section=$1" funktioniert; wieso das?

                                  $0 liefert den gesamten untersuchten Ausdruck, $1 den ersten geklammerten "Treffer". Wenn du alles umklammerst, sind beide gleich.

                                  Nimm noch mal mein Beispiel, erweitere es wie folgt:
                                  RewriteRule ^test([0-9]+).html$ index.php?t0=$0&t1=$1

                                  • und lasse dir dann den Inhalt von $_GET per print_r zur Kontrolle ausgeben.

                                  MfG ChrisB

                                  --
                                  „This is the author's opinion, not necessarily that of Starbucks.“
                                  1. gut, danke;
                                    hätte dann noch eine frage:
                                    meine homepage liegt auf http://meinehomepage.anbieter.de/ . das heißt dort findet man sämtliche dateien und ordner, die zu meiner homepage gehören in einer verzeichnisstruktur. erst wenn nun nach dem letzten stand noch eine zeichenkette angefügt wird, (http://meinehomepage.anbieter.de/irgendeine-zeichenkette) gelangt man auf die startseite. gibt es vielleicht auch mit mod_rewrite eine methode das leerzeichen hinter dem letzten slash der adresse als bestendteil einer solchen zeichenkette erkennen zu lassen, sodass ein benutzer auch dann zur startseite geführt wird und die verzeichnisstruktur unter "http://meinehomepage.anbieter.de/" somit nicht zu gesicht bekommen kann?
                                    gruß

                  2. Hi,

                    also die "test.html" gibt es doch eigentlich gar nicht. wie soll ich sie denn dann ins entsprechende href-Attribut schreiben.

                    In dem du bspw. nacheinander die Buchstaben eintippst.

                    diese zeichenkette soll nur eben IMMER in adressleiste stehen anstatt der eigentlich dynamischen vaiante index.php?section=0.

                    Dann hat sie auch im href-Attribut zu stehen.

                    aber ich habe nun mal keinen ansatz, da ich gerade mal ein wenig halbwissen über die sprachen habe.
                    also geht es noch genauer?

                    Das fragen wir dich - Cheatah hat's ja gerade auch schon geschrieben. Wir wissen nicht, wo dein Problem liegt - also musst du es genauer beschreiben.

                    MfG ChrisB

                    --
                    „This is the author's opinion, not necessarily that of Starbucks.“
                    1. also,
                      ich versuch's nochmal:
                      ich habe eine homepage (die wird im folgenden der einfachheit halber aufs wesentliche reduziert). die besteht aus einer index.php und verschiedenen test0.php,test1.php etc. in den test.php's steht nun der inhalt, der über eine dynamische navigation in der index.php ins entsprechende "inhalts-tag" geladen wird. dabei wird der parameter section mit werten belegt. $section=0 für den inhalt aus test0.php und $section=1 für den inhalt aus test1.php. möchte ich also den inhalt aus test0.php auf der homepage sehen, klicke ich den test0-link in der navigation und es wird die seite index.php?section=0 ausgegeben, analoges gilt für test1. es ist also eine ganz simple dynamische homepage.
                      schließlich wird beim klick auf den link für den inhalt aus test0.php logischerweise auch die zeichenkette index.php?section=0 in der adresseleiste stehen (und für test1 eben index.php?section=1).
                      ich hätte nun aber gern,dass statt "index.php?section=0" "test0.html" oder meinetwegen "test0" in der adresseleiste steht, und zwar auch dann,wenn ich eben den inhalt aus test0.php über den navigationslink lade.

                      mit
                      "RewriteEngine On
                      RewriteRule ^test0.html$ index.php?section=$0"

                      in der .htaccess würde da bis jetzt "test0.html?section=0"in der adressleiste stehen. wie kann ich nun also verhindern, dass "?section=0" in dieser zeichenkette erscheint.
                      am besten wäre ein weg in der .htaccess

                      gruß

                      1. Hi,

                        mit
                        "RewriteEngine On
                        RewriteRule ^test0.html$ index.php?section=$0"

                        in der .htaccess würde da bis jetzt "test0.html?section=0"in der adressleiste stehen.

                        Nein, wuerde es nicht - wenn du nur endlich test0.html ins href-Attributes deines Links im HTML schreiben wuerdest!

                        wie kann ich nun also verhindern, dass "?section=0" in dieser zeichenkette erscheint.

                        In dem du es gar nicht erst aufrufst, sondern test0.html.
                        Letzteres ist doch das, was du verlinken und aufrufen willst - also warum tust du es nicht endlich?

                        MfG ChrisB

                        --
                        „This is the author's opinion, not necessarily that of Starbucks.“
              2. Hi,

                gibt es vielleicht konkretere lösungsvorschläge?

                wenn Du konkretere Lösungsvorschläge haben möchtest, brauchst Du konkretere Probleme. Dein bisher beschriebenes ist gelöst.

                Cheatah

                --
                X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes