Verständnisfrage zu Rewrite, Urls, Links

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

Antworten
Flixus
.
.
Beiträge: 2
Registriert: 30.12.2009 13:14

Verständnisfrage zu Rewrite, Urls, Links

Beitrag von Flixus »

Hallo,

bin neu hier und Neuling in Sachen mod rewrite. Habe hier schon das ein und andere Thema gelesen aber nicht wirklich so die Grundlagen gefunden. Möchte auch nicht mir passende rewrites suchen, möchte das eher verstehen. Sprich, ich habe ein kleine CMS geschrieben bzw bin dabei. Da mich nun die URLs nerven wo ich 1-3 Parameter noch mit übergebe möchte ich das nun gleich in /xyz/ Struktur.

Soweit wie ich das verstanden habe bis jetzt muss ich meine dynamischen Links im CMS so gestalten "/impressum" und nicht "index.php?site=content&cat_id=6&cat=06". Die URL "index.php?site=content&cat_id=6&cat=06" ist unsinn, ich arbeit noch dran Wink...eines von beiden cat_id oder cat kann ich programmiertechnisch weglassen.

Nun stellt sich für mich die Frage, wie und was nehme ich um eine gescheite URL als Link zu haben. Nehmen wir an ich habe die Menüpunkte "Impressum" und "Meine Galerie" und "Äste sind klein".

Ich arbeite bisher mit der ID des Menüeintrages und hole den jeweiligen DB Eintrag (Content), aber das ist mir wie gesagt nicht mehr zeitgemäß und sieht unschön aus.

Ich könnte nun jetzt z.B. den Namen aus DB nehmen "Äste sind klein" und erstmal intern in Aeste-sind-klein umwandeln und dann als Link im CMS einfach "/Aeste-sind-klein" machen und diesen jetzt als Link bei "Äste sind klein" hinterlegen anstatt "index.php?site=content&cat_id=6&cat=06"?

Muss/Sollte man Ä und Leerzeichen jeweils ändern?
Sollte man mit den Namen vom Menü überhaupt arbeiten oder nur den Ids?

Den Pfad "/Aeste-sind-klein" den ich nun hinter "Äste sind klein" habe müsste ich letztendlich mit modrewrite zu index.php?site=Aeste-sind-klein machen und anhand dessen den entsprechenden Content aus Datenbank holen?

Ist das eine gute Idee oder wie sollte man das mit Menü / Links und den dazugehörigen Content lösen?
Angesichts Modrewrite/Rewrite Regel bräuchte ich später sicher Hilfe, aber erstmal wissen wie was warum...

Danke für Eure Mühe, Zeit und Antworten.

Edit: können mehrere Regeln abgearbeitet werden? z.b. ich habe noch ab und an "&monat=1&jahr=2010" in der url, z.b. /events/1/2010, ginge das jenach dem ob vorhanden das extra wieder in "&monat=1&jahr=2010" umzuwandeln?
Gumbo
Moderator
Moderator
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitrag von Gumbo »

Am besten lässt du dein CMS die URLs generieren und interpretieren, da es ja schließlich am besten weiß, was sie bedeuten. Und mit mod_rewrite lenkst du dann nur die Anfragen an dein CMS, etwa:

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ index.php [L]
Der angefragte URL-Pfad steht dann zusammen mit der angefragten Query in „$_SERVER['REQUEST_URI']“. Diesen kannst du dann in die einzelnen Pfadsegmente zerlegen und weiterverarbeiten.
Markus Wulftange
Flixus
.
.
Beiträge: 2
Registriert: 30.12.2009 13:14

Beitrag von Flixus »

Hallo,

danke für den Tipp und den Code, ich probier es dann mal. Bin mir selbst halt noch nicht ganz
im klaren wie ich die urls im cms mache bzw wie es dann mit eventuellen modulen laufen wird.

danke und bis bald ;)...

Grüße
Ziegenpeter
.
.
Beiträge: 4
Registriert: 28.04.2010 17:06

Beitrag von Ziegenpeter »

Hallo Markus,

es trifft genau das, was Flixus beschreibt auch auf meine Arbeit an einem kl. CMS zu.

Ich kann es nur nicht verstehen, was Du meinst. Ist es besser schon im CMS die Links richtig zu formatieren und auszugeben also aus z.B.:
http:/localhost/Site/index.php?site=live&loc=sub&id=16&catalias=neue_seiten

den link so zu formatieren:
http:/localhost/Site/index.php/neue_seiten

und die htaccess Regel

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ index.php [L]
filtert dann nur das "index.php" raus,

trotzdem wird dann die index.php gefunden und dort kann ich dann z.B. mit:
$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
auf die URL zugreifen und weiterverarbeiten.
Ja, mir fehlt noch das grundsätzliche Verständnis von mod_rewrite aber vieleicht kannst Du mir ja helfen.

vielen Dank

Peter Z.
Gumbo
Moderator
Moderator
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitrag von Gumbo »

Mit mod_rewrite können nur von außen kommende Anfragen intern umgeschrieben oder extern weitergeleitet werden. Es müssen also schon die bevorzugten URLs ausgegeben werden, damit diese angefragt werden können.
Markus Wulftange
Antworten