Dynamisches in Statisches!?
kocs
- webserver
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ß
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
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ß
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
ja, das ist der Punkt. Fixe ihn.
uff, also die seite soll schon unbedingt dynamisch bleiben.
gruß
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
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ß
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
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ß
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
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ß
sorry,hab aus versehen 2mal gepostet.
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
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ß
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
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ß
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
MfG ChrisB
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ß
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
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ß
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
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