mod_rewrite
Hagen
- sonstiges
Hey,
thema:mod rewrite
www.meineseite.de?seite=home <<<steht als URL da
www.meineseite.de/home <<<<soll dort stehen
kann mir jemand sagen wie meine .htacces aussehen müsste damit ich das erreiche??
Wenn das erreicht ist, meine Frage dazu. Schicke ich daten an ein script(per $_GET), schlägt mod_rewrite dann zu, nach dem das script die variablen bekommen hat, oder kommen diese gar nicht erst an, und ich brauch dafür wieder eine Regel?
Bsp:
www.meineseite.de?seite=home&user=niemand
soll werden zu
www.meineseite.de/home ist dann aber $_GET['user'] immer noch "niemand" oder müsste ich den umweg über:
www.meineseite.de/home/niemand gehen und dann die URL auslesen???
Also ihr lichtspender... freu mich auf eure antworten.
MFG Hagen
hi,
www.meineseite.de?seite=home <<<steht als URL da
www.meineseite.de/home <<<<soll dort stehen
Also willst du www.meineseite.de/home im Browser aufrufen, und www.meineseite.de/?seite=home soll intern daraus werden?
kann mir jemand sagen wie meine .htacces aussehen müsste damit ich das erreiche??
So allgemein umzuleiten, wäre nicht besonders clever.
Auch www.meineseite.de/bild.jpg würde dann umgeleitet, und www.meineseite.de/unterordner/... ebenfalls.
Also solltest du erst mal für die Menge aller umzuleitenden Anfragen ein geeignetes Muster suchen.
Nehmen wir doch zum Beispiel mal nur Kleinbuchstaben, ohne Punkt und Slash etc.
RewriteRule ^([a-z]+)$ /seite.xyz=$1
seite wurde hier in seite.xyz umbenannt (bietet sich ja sowieso an, wenn irgendein Script dahinterliegt).
Andernfalls müsstest du die Anfrage nach seite noch extra vom Umschreiben ausschließen.
Wenn das erreicht ist, meine Frage dazu. Schicke ich daten an ein script(per $_GET), schlägt mod_rewrite dann zu, nach dem das script die variablen bekommen hat, oder kommen diese gar nicht erst an, und ich brauch dafür wieder eine Regel?
Kommt drauf an.
Beim Umschreiben wird der Query-String nicht ohne weiteres beachtet.
Du kannst aber über das Flag [QSA], query string append, angebenen, dass der originale Querystring wieder zum Umschreibeergebnis hinzugefügt werden soll.
www.meineseite.de?seite=home&user=niemand
soll werden zu
www.meineseite.de/home ist dann aber $_GET['user'] immer noch "niemand"
Warum sollte es?
"niemand" kommt im URL www.meineseite.de/home überhaupt nicht vor, also wo soll es herkommen?
oder müsste ich den umweg über:
www.meineseite.de/home/niemand gehen und dann die URL auslesen???
Oder eben entsprechend umschreiben.
Weitere Fragen beantwortet das Manual zum Modul mod_rewrite, es gibt den URL Rewriting Guide, und es gibt gute deutschsprachige Ressourcen wie http://www.modrewrite.de/
gruß,
wahsaga
Hey,
Warum sollte es?
"niemand" kommt im URL www.meineseite.de/home überhaupt nicht vor, also wo soll es herkommen?
Deshalb ja die Frage wann mod_rewrite zuschlägt, bevor oder nachdem die daten an das script gesendet wurden.
Dann kümmer ich mich mal um die Links
Vielen Dank!!!
MFg hagen
hi,
Deshalb ja die Frage wann mod_rewrite zuschlägt, bevor oder nachdem die daten an das script gesendet wurden.
Davor natürlich - noch ist ja gar nicht bekannt, "wohin" die Daten gehen sollen.
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html.en#InternalAPI
gruß,
wahsaga
Hallo,
www.meineseite.de?seite=home <<<steht als URL da
www.meineseite.de/home <<<<soll dort stehen
Ohne sicher zu wissen, ob das die optimale Lösung ist, funktionieren tut es jedenfalls:
RewriteEngine on #ist denke ich klar
RewriteBase / #da gehört das Verzeichnis hin, für das die Regeln gelten sollen, in dem Fall root
RewriteCond %{SCRIPT_FILENAME} !-f #Wenn der request nicht auf eine existiente Datei zielt...
RewriteRule ^(.*)\..?htm.?$ /script.php?seite=$1 [L] #...wird aus /foo.?htm? -> /script.php?page=foo
#somit wird bar.html trotzdem aufgerufen, wenn es existiert!
#dann weiter:
RewriteCond %{SCRIPT_FILENAME} !-f #Request ist keine existierende Datei...
RewriteCond %{SCRIPT_FILENAME} !-d #...und kein existierendes Verzeichnis, dann:
RewriteRule ^(.*)$ /main.php?page=$1 [L] #wird aus /foo -> /script.php?seite=foo
Vielleicht geht es auch eleganter, daß würde ich dann selbst gerne wissen ;)
Aber es ist möglich mit /foo, foo.?htm? (also shtm, shtml, xhtm, xhtml u.s.w.], die entsprechende Seite aufzurufen.
Durch die RewriteConditions bleibt es aber trotzdem möglich in vorhanden Verzeichnisse zu wechseln, bzw. statische URL's aufzurufen.
Für Deinen Fall, wenn Du die Seiten nicht auch mit Endung erreichen willst, kann Du eigentlich die erste RewriteCond und RewriteRule löschen. Der untere Block würde dann reichen.
netten Tag
^da Powl
Sehr schön, danke werd das mal testen!
MFG HAgen
hallo,
Vielleicht geht es auch eleganter, daß würde ich dann selbst gerne wissen ;)
Ja, da gibt es eine Möglichkeit. Schließlich muß es gar nicht immer mod_rewrite sein. Allerdings klappt das nicht, wenn es um bestimmte Übergabeparameter gehen sollte.
www.meineseite.de?seite=home <<<steht als URL da
ist ohnehin keine sehr glaubwürdige Angabe (siehe auch wahsagas posting). Man kann aber
www.meineseite.de/seite
tatsächlich auf
http://www.meineseite.de/home
"umleiten", indem man
RedirectPermanent /seite http://www.meineseite.de/home
angibt. Das gilt dann für das gesamte Verzeichnis. Redirect wird nicht von mod_rewrite vermittelt, sondern von mod_alias.
Grüße aus Berlin
Christoph S.
Hallo Christoph,
Ja, da gibt es eine Möglichkeit. Schließlich muß es gar nicht immer mod_rewrite sein. Allerdings klappt das nicht, wenn es um bestimmte Übergabeparameter gehen sollte.
Oops, die Endung .de hatte ich übersehen, bzw. als php interpretiert. Mein Beispiel bezieht sich ja auf ein php script, das mittels $_GET['seite'] die Information über den anzuzeigenden Inhalt übermittelt bekommt.
also http://example.org/foo nach http://example.org/script.php?seite=foo auflösen.
In dem Fall also durchaus ein bestimmter Übergabeparameter. Somit käme käme man hier mit einem einfachen Redirect wohl nicht aus?
netten Tag & Grüße _nach_ Berlin [auch so 'toller' Regen? :( )
^da Powl
hallo,
Mein Beispiel bezieht sich ja auf ein php script, das mittels $_GET['seite'] die Information über den anzuzeigenden Inhalt übermittelt bekommt.
Wenn es tatsächlich _nur_ um PHP ginge, ließe sich in Abhängigkeit von der GET- oder POST-Variablen noch etwas anderes anstellen, indem man header("Location: http://www.example.com/"); benutzt. Dann muß der Apache das nicht erledigen.
also http://example.org/foo nach http://example.org/script.php?seite=foo auflösen.
In dem Fall also durchaus ein bestimmter Übergabeparameter. Somit käme käme man hier mit einem einfachen Redirect wohl nicht aus?
Nein, so würde das nicht funktionieren.
netten Tag & Grüße _nach_ Berlin [auch so 'toller' Regen? :( )
Es tröpfelt gelegentlich, aber das ist immer noch lange nicht genug für die Pfifferlinge.
Grüße aus Berlin
Christoph S.
Hallo,
Es tröpfelt gelegentlich, aber das ist immer noch lange nicht genug für die Pfifferlinge.
Jetzt weiß man wenigstens was Du zum Holunderwein ißt! :-x
'n Guten!
netten Abend
^da Powl
hallo Powl,
Jetzt weiß man wenigstens was Du zum Holunderwein ißt! :-x
Nö. Aber solange das Topic HOLUNDERWEIN offensichtlich noch in der Diskussion ist und mir folglich (noch) nicht zur Verfügung steht, kann ich dir bedauerlicherweise keine näheren Auskünfte geben.
Grüße aus Berlin
Christoph S.
habe d'ehre Christoph
Nö. Aber solange das Topic HOLUNDERWEIN offensichtlich noch in der Diskussion ist ...
Was verleitet Dich zu dieser obskuren Annahme?
man liest sich
Wilhelm
hallo Wilhelm,
Was verleitet Dich zu dieser obskuren Annahme?
Mein Holunderwein? Und daß du das Topic für so wichtig erachtet hast, es ausdrücklich unter vorläufige Kuratel stellen zu müssen?`Wenn man etwas explizit unter Nennung seines Namens ausschließt, muß es ja zuvor irgendwo diskutiert worden sein ...
*g*
Grüße aus Berlin
Christoph S.