Relative Links bei suchmaschinenfreundlichen URLs

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

Relative Links bei suchmaschinenfreundlichen URLs

Beitragvon Zytoblast » 21.03.2008 00:09

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
Zytoblast
.
.
 
Beiträge: 5
Registriert: 20.03.2008 23:56
Wohnort: Düsseldorf

Beitragvon Gumbo » 22.03.2008 09:02

Relative Pfade werden immer relativ zum Basispfad aufgelöst, der – falls nicht anders angegeben – der aktuelle Pfad ist. Daran kannst du nichts ändern.
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon Zytoblast » 22.03.2008 21:59

Gumbo hat geschrieben:Relative Pfade werden immer relativ zum Basispfad aufgelöst, der – falls nicht anders angegeben – der aktuelle Pfad ist. Daran kannst du nichts ändern.


...und der Basispfad ist derjenige, der im Browser eingetippt/angezeigt wurde und nicht der, auf den umgeschrieben wurde? Habe ich das richtig verstanden? Denn genau das ist eigentlich der Grund für mein Posting: Ich dachte, der Pfad, von dem ausgegangen wird, ist derjenige, der intern verwendet wird, also derjenige, auf den ich umschreibe.

Anhand meines Beispiels:

User tippt ein: www.domain.de/content/ und sieht auch genau das in seinem Browser. Intern wird jedoch www.domain.de/index.php aufgerufen. Nun dachte ich bisher, der Pfad wäre in diesem Beispiel also "/" und nicht etwa "/content/". Wenn ich dich richtig verstanden habe, ist es aber genau andersrum.

Bitte nochmal kurz bestätigen, ob ich das jetzt richtig verstanden habe.

Ansonsten: Vielen Dank für deine Antwort.

Übrigens, was ich wirklich erstaunlich finde: Eine exakte Definition, welcher Pfad da eigentlich verwendet wird, steht in keiner der Dokus, die ich in den letzten Tagen gelesen habe. Anscheinend wird es als so selbstverständlich angenommen, dass keiner was dazu sagt :shock:
Zytoblast
.
.
 
Beiträge: 5
Registriert: 20.03.2008 23:56
Wohnort: Düsseldorf

Beitragvon Gumbo » 23.03.2008 08:03

Da die Pfade vom Browser aufgelöst werden, kann er dies auch nur aufgrund der ihm bekannten Informationen tun. Und die ihm bekannte Basis-URL ist – falls nicht extra angegeben – die aktuelle URL.
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon Zytoblast » 23.03.2008 15:07

Herzlichen Dank! Endlich erschliesst sich mir das, was bisher zu Verwirrungen geführt hat :idea:
Zytoblast
.
.
 
Beiträge: 5
Registriert: 20.03.2008 23:56
Wohnort: Düsseldorf


Zurück zu Programmierung & Scriptanpassung für mod_rewrite

Wer ist online?

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