Path-basiertes URL-Rewrite
url_path_rewrite, Version 2.4
Autor: Wolfgang Busch
Dieses AddOn ist eine Erweiterung des Standard-Rewriters und
nutzt den Extension Point URL_REWRITE .
Der Artikel-URL wird in der Form eines Kategorien-Pfades
gebildet. Die Pfadanteile werden unabhängig von den Kategorien-
und Artikelnamen gebildet. Auf diese Weise können die URLs kurz
und lesbar gehalten werden.
Jeder Artikel erhält diese zusätzlichen Parameter, die in
der Artikel-Tabelle mitgeführt werden: einen Kurznamen, einen
Kurznamen für die Kategorie und den vollständigen URL. Die
zugehörigen Parameter werden als MetaInfos eingerichtet.
Die Sprache einer Seite kann wahlweise im URL gekennzeichnet
werden oder im Sinne eines "Sprach-Kontextes" durch
eine Session-Variable definiert sein.
Artikel können weiterhin auch über den Redaxo-Standard-URL
index.php?article_id=ID&clang=CID aufgerufen werden.
In der .htaccess-Datei sind keine besonderen RewriteRules
erforderlich.
Setzen eines Wunsch-URLs
Die URL-Standardform in Redaxo
index.php?article_id=ID&clang=CID enthält
lediglich die Artikel-Id und die Sprach-Id. In der Regel soll
stattdessen jeder Artikel einen "Wunsch-URL" erhalten, der
Hinweise gibt auf Artikelinhalt, Themenkategorien u.s.w.
Er soll zugleich die Kategorie-Struktur der Website in der Form
category1/category2/.../categoryN/article abbilden.
Im einfachsten Falle können die Pfadanteile aus den Kategorienamen
und dem Artikelnamen gebildet werden. In der Regel führt das aber
zu langen URL-Strings. Dieses AddOn erlaubt es, die Pfadanteile
unabhängig von den Kategorie-/Artikelnamen einzugeben und damit
übersichtlichere URLs zu erzeugen.
Zur Realisierung wird eine Funktion definiert, die den gewünschten
URL am Extension Point URL_REWRITE zurück gibt.
Im Backend wird diese Funktion nur im "Content-Kontext"
eines Artikels (Editieren oder andere Funktionen) aufgerufen,
im Frontend nur innerhalb der Funktion
rex_getUrl($article_id,$clang_id) . Letztere liefert
dem Redakteur (z. B. in Templates oder Modulen) den URL eines
Artikels sowie die Anzeige im Browser-Adressfeld.
Rewrite-Mechanismus
Ein URL in der oben beschriebenen Form
wird (inkl. Parameter) durch eine Umleitungsregel
RewriteRule ^(.*)$ index.php?%{QUERY_STRING} [L]
in der Datei .htaccess an das Redaxo CMS übergeben.
Links auf Dateien oder Verzeichnisse werden nicht umgeleitet.
In der Datei boot.php des AddOns wird der ursprüngliche
URL inkl. Parametern mittels $_SERVER['REQUEST_URI']
ausgelesen und daraus die zugehörige Artikel-Id und ggf. dessen
Sprach-Id abgeleitet. Die Sprach-Id kann alternativ auch aus
einem "Sprach-Kontext" ermittelt werden, der z.B. über
eine Session-Variable realisiert ist.
Elemente der URL-Darstellung:
Die Pfadanteile eines URLs sind als
zusätzliche Parameter in der Artikel-Tabelle abgelegt und als
MetaInfos editierbar. Sie sind für alle Sprachen gleich. Diese
MetaInfos werden bei der Installation als Zeilen in der Tabelle
rex_metainfo_field
und als Spalten in der Tabelle
rex_article angelegt.
Bei der De-Installation werden sie nicht wieder entfernt.
cat_dirname : "Verzeichnisname"
für Kategorien, Default-Wert: catname
(Kategoriename), editierbar im Kategorie-Menü
art_basename : "Dateiname"
für Artikel, Default-Wert: name.html
(Artikelname, ggf. mit Namenserweiterung), editierbar im
"Content-Kontext" des Artikels,
bei Kategorie-Startartikeln: index.html
(vorgegebener Wert)
art_custom_url : aus den obigen
Daten generierter Artikel-URL ("Custom URL") ohne
führenden /, ablesbar in den Artikel-Metadaten (nicht editierbar),
den Wert (mit führendem /) liefert die Standardfunktion
rex_getUrl(article_id,clang_id)
"Dateiname"-Erweiterung und "Dateiname" eines Startartikels
können auch anders konfiguriert werden.
Erlaubte Zeichen für die MetaInfos sind Buchstaben, Ziffern, Punkt(.), Minuszeichen(-), Unterstrich(_). Nicht erlaubt sind u.a. Umlaute oder Leerzeichen.
Kennzeichnung der Sprache im URL:
Die Kennzeichnung der Sprache erfolgt mittels
der definierten Sprachcodes, wahlweise durch
- eine Erweiterung des URLs um den voran gestellten Sprachcode
(
/zz/cat_dirname1/... )
oder
- eine Erweiterung des URLs um einen Parameter
(
.../art_basename?language=zz )
oder
- eine Session-Variable
$_SESSION['language']='zz'
(definiert den aktuellen "Sprach-Kontext"), Links auf
anderssprachige Artikel (Sprachcode 'xy') müssen einen
URL-Parameter language=xy enthalten (vergl.
vorherige Zeile).
Die Art der Kennzeichnung ist konfigurierbar. Bei der Standardsprache
und damit auch bei einsprachigen Installationen entfällt
sie ganz.
AddOn-Download
|