Hallo zusammen,
ich bin neu in der Thematik mod_rewrite und wollte gerne eine Info zum Verständnis von Leuten, die sich auskennen.
Ich möchte durch Umschreiben mittels mod_rewrite suchmaschinenfreundliche URLs erreichen. Allerdings liegt das Problem nicht im Umschreiben an sich, sondern in der Verwendung von relativen Links. Das Problem beschreibe ich weiter unten, sobald klar ist, was genau ich erreichen will und mache.
Hier ein paar typische Beispiele für gewünschte Umschreibungen:
www.domain.de/content/ -> www.domain.de/index.php
www.domain.de/content/about/ -> www.domain.de/about.php
www.domain.de/content/product/71x2/ -> www.domain.de/product.php?page=71x2
Hierzu verwende ich folgende Rewrite-Regeln in .htaccess:
RewriteEngine On
RewriteBase /
RewriteRule content/(index.html?)?$ index.php [L]
RewriteRule content/([^/]+)/(index.html?)?$ $1.php?%{QUERY_STRING} [L]
RewriteRule content/([^/]+)/([0-9]+)([^./]*)?.html?$ $1.php?page=$2&%{QUERY_STRING} [L]
Bis hierhin funktioniert auch alles einwandfrei. Nun also zum eigentlichen Problem: Die Links im HTML der Seite an sich sind alle relativ, z.b. <a href="index.php"> und funktionieren nach dem Umschreiben nicht mehr.
Wenn ich also nun beispielsweise die URL www.domain.de/content/about/ aufrufe - und tatsächlich das Skript www.domain.de/about.php aufgerufen wird - und dort dann den „Homepage“-Link anklicke („index.php“), erscheint folgende Fehlermeldung: „The requested URL /content/about/index.php was not found on this server.“
Meine Frage ist nun, ob das so ein richtiges/gewolltes Verhalten ist - und meine mod_rewrite-Kenntnisse noch nicht genügend sind, ich es also anders lösen muss oder ob ich noch etwas falsch konfiguriert habe.
Folgende Lösungen zu diesem Problem konnte ich bisher finden, wenn es nicht an der Konfiguation liegt, sondern eben durch Umprogrammierung erfolgen muss:
1. Ich verwende keine relativen URLs mehr. Dies ist leider ausgeschlossen, da sie teilweise aus einer Datenbank kommen.
2. Ich nutze ein <base...> im HTML head, um eine festverdrahtete Basis-URL zu haben. Dies ist mir aus mehreren Gründen unsympathisch, u.a. weil ich dadurch immer die Basis-URL ändern muss, wenn ich lokal bzw. auf dem Live-Server arbeite. Allerdings arbeite ich so gerade vorübergehend.
3. Ich muss intern alle Links „revers“ umschreiben, bevor ich sie ausgebe. Das sieht dann aus der Sicht des Benutzers auch hübscher aus, weil er dann im Browser in der Statuszeile nicht sowas wie www.domain.de/index.php?page=about stehen hat, sondern eben www.domain.de/about/. Das ist eigentlich das Verhalten, das ich erreichen möchte. Möglicherweise ist mein einziger Denkfehler der, dass ich denke, das müsste durch das Rewriting irgendwie automatisch so passieren. Aber vielleicht überschätze ich die Möglichkeiten von mod_rewrite einfach nur und muss es schlicht von Hand machen, so wie eben beschrieben!?
Vielen Dank & viele Grüsse
Mario


