Slashes sollen Parameter sowie Werte trennen

Wie wir alle wissen (sollten) ändert mod_rewrite keine Links im Script. Damit auch die Links auf Deiner Page auf die neuen "Rewrited URLs" zeigen bedarf es der Anpassung im Code. Fragen und Probleme rund um's Coding werden hier diskutiert.

Moderator: Super-Mod

Slashes sollen Parameter sowie Werte trennen

Beitragvon t3Qn0lo-G » 12.07.2008 10:07

Hallo Leute!
Da ich mich erst seit kurzem mit mod_rewrite auseinandersetze, somit noch nicht so den Plan habe und auch hier im Forum noch keine passende Lösung gefunden habe, wollte ich einfach mal mein Problem schildern, ich denke nämlich, dass sich einige erheblich gut mit mod_rewrite auskennen und mir bestimmt irgendwie helfen können :)

Also: vielleicht kennt ihr auch die Seiten von StudiVZ, SchülerVZ und meinVZ und da ist mir das schon aufgefallen:

URL sehen dort folgendermaßen aus:

http://www.dieurl.de/Start z.B. was in dem Fall nichts anderes sein wird wie (so in der Art) -> http://www.dieurl.de/index.php?page=Start

Aber spinnen wir die Sache einmal weiter: mein Vorhaben ist es jetzt folgendes zu erzielen: ich möchte dahinter beliebig viele mit Slashes getrennte werte anfügen die dann nach folgendem Schema (ich mache ein paar Beispiele) umgewandelt werden:

http://www.dieurl.de/news -> Weiterleitung auf http://www.dieurl.de/news.php
http://www.dieurl.de/news/page/5 -> Weiterleitung auf http://www.dieurl.de/news.php?page=5
http://www.dieurl.de/news/page/5/kat/3 -> Weiterleitung auf http://www.dieurl.de/news.php?page=5&kat=3
http://www.dieurl.de/guestbook -> Weiterleitung auf http://www.dieurl.de/guestbook.php
http://www.dieurl.de/faq/bereich/2/frage/4/add/yes -> Weiterleitung auf http://www.dieurl.de/faq.php?bereich=2&frage=4&add=yes

Sol, das Prinzip sollte klar sein, jedenfalls wollte ich nur zum Ausdruck bringen, dass es egal ist, wie viele Parameter man in Form von diesen Slashes anhängt.... ich hoffe mal sowas ist möglich, da ich es ja schon gesehen habe... nicht dass man aber für jeden Parameter eine eigene RewriteRule erstellen muss :)
t3Qn0lo-G
.
.
 
Beiträge: 3
Registriert: 12.07.2008 09:57

Beitragvon t3Qn0lo-G » 13.07.2008 13:13

Sagen wir mal so, ich habs jetzt folgendermaßen realisiert:

Der ich hat geschrieben:RewriteEngine on

RewriteRule ^$ index.php [L]
RewriteRule ^index[/]?$ index.php [L]


RewriteRule ^([^/^php]*)(.?)$ /modules/$1/index.php [NC,L]
RewriteRule ^([^/^php]*)/([^/]*)([^/]?)$ /modules/$1/$2.php [NC,L]


RewriteRule ^([^/^php]*)/([^/]*)/([^/]+)/$ /modules/$1/$2.php?query=$3 [NC]


Also, zur Erklärung:

Ich habe jetzt die Möglichkeit z.B. (da ich es lokal laufen habe) foglende Dinge einzugeben:

http://localhost (Umleitung auf) -> http://localhost/index.php
http://localhost/index -> http://localhost/index.php
http://localhost/index/ -> http://localhost/index.php

Das habe ich realisiert mit dem Bereich, der im Code rot markiert wurde.. vielleicht gibt es da noch eine einfachere Variante, da ich diese noch etwas unschön finde, also wenn jemand Besserungsvorschläge hat, immer her damit!

Dann gibt es noch die grünen Zeilen, die folgendes bewirken:
http://localhost/bla -> http://localhost/modules/bla/index.php
http://localhost/bla/ -> http://localhost/modules/bla/index.php

Sowie die 2. grüne Zeile:
http://localhost/bla/test -> http://localhost/modules/bla/test.php
http://localhost/bla/test/ -> http://localhost/modules/bla/test.php

Funktioniert bis hier hin alles tadellos... nur nun kommt mein Problem und ich habe keine Ahnung wie ich das angehen sollte (*Gumbo anguck*)

Bei der blauen Zeile sind mir gestern fast die Haare ausgefallen...
die soll einen String übergeben, der dann einer variablen übergeben wird, die dann diese String trennt und variablen generiert (ich dachte es so folgendermaßen: id-5-cat-10" usw... wird dann zu $id=5 $cat=10)... ist ja auch alles gar kein problem nur wenn ich oben in die adresszeile beispielsweise

http://localhost/bla/test/xyz eingebe... geht es nicht, da man ja an der regexp sieht:
RewriteRule ^([^/^php]*)/([^/]*)/([^/]+)/$ /modules/$1/$2.php?query=$3 [NC]

dass da hinter noch ein Slash kommen muss... jetzt mein Problem: wenn ich die regex so umwandle, dass dieses letzte zeichen mit dem Slash optional ist.. kommt immer ein internal server error, und ich weiß nicht wieso... wenn mir da jetzt jemand helfen könnte, wärs toll.. vielleicht kann derjenige noch ein Stück weitergehen und noch mit einem slash dahinter eine weitere möglichkeit für parameter zu geben:

http://localhost/bla/test/id-5/HIERNOCHMALPARAMETER .... dan wäre ich wunschlos glücklich ;)

Edit: achja das mit dem ^php weiß ich gar nicht ob das richtig ist oder ob das überhaupt dahin muss...
t3Qn0lo-G
.
.
 
Beiträge: 3
Registriert: 12.07.2008 09:57

Beitragvon Gumbo » 13.07.2008 13:55

Ich rate dir erst einmal Regeln für den Aufbau und die Schreibweise von URLs zu entwickeln und diesen auch strikt zu folgen. In deinem Fall trifft dies insbesondere auf die Schreibweise mit oder ohne abschließendem Schrägstrich. Hier solltest du nur eine Variante zulassen.

Was nun dein Problem angeht, hab ich folgenden Vorschlag (ohne abschließende Schrägstriche):
Code: Alles auswählen
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^\ \?]+\.php[/\ \?]
RewriteRule ^(.+)\.php$ /$1 [R=301]

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /modules/
RewriteRule ^modules/(.*)(/[^/]+\.php)?$ /$1 [R=301]

RewriteRule ^[^/]+$ /modules/$0/index.php [L]
RewriteRule ^[^/]+/[^/]+$ /modules/$1/$2.php [L]
RewriteRule ^[^/]+/[^/]+/[^/]+$ /modules/$1/$2.php?query=$3 [L]
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon t3Qn0lo-G » 13.07.2008 14:37

Danke dir erst einmal recht herzlich, Markus!

Allerdings: beim Aufruf kommt entweder ein Internal Server Error, oder aber Dokument wurde nicht gefunden, egal was ich eingebe!
t3Qn0lo-G
.
.
 
Beiträge: 3
Registriert: 12.07.2008 09:57


Zurück zu Programmierung & Scriptanpassung für mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste