Software-Entwicklungen

path-basiertes URL-Rewrite für Redaxo 5
Version 2.2
Autor: Wolfgang Busch

  • Dieses AddOn ist eine Erweiterung des Standard-Rewriters und nutzt den Extension Point URL_REWRITE.
  • Der Artikel-URL wird automatisch in der Form category1/category2/.../categoryN/article generiert und bildet so den Kategorien-Pfad eines Artikels ab. Für die zugehörigen Kategorie- und Artikelbezeichnungen werden Meta Infos eingerichtet und als zusätzliche Artikelparameter genutzt.
  • Die Sprache einer Seite kann wahlweise im URL oder durch eine Session-Variable gekennzeichnet werden.
  • Artikel können auch über den Redaxo-Standard-URL index.php?article_id=ID&clang=CID aufgerufen werden.
  • Es sind keine besonderen RewriteRules erforderlich.
Setzen eines Wunsch-URLs
Ein URL hat in Redaxo die Standardform index.php?article_id=ID&clang=CID mit Verweis auf die Artikel-Id und die Sprach-Id. In der Regel soll stattdessen jeder Artikel einen "Wunsch-URL" erhalten, der Hinweise gibt auf Artikelinhalt, Themenkategorie, Site-Struktur o. Ä. 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 (edit, functions) 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 und die Anzeige im Browser-Adressfeld.

Rewrite-Mechanismus
Ein Link auf einen Artikel wird durch eine Umleitungsregel
RewriteRule ^(.*)$ index.php?%{QUERY_STRING} [L]       (Datei .htaccess)
an das Redaxo CMS übergeben. Links auf Dateien oder Verzeichnisse erfolgen ohne Umleitung. Die Umleitung führt zunächst auf den Site-Startartikel. Damit stattdessen der gewünschte Artikel angezeigt wird, muss die aktuelle Artikel-Id rex_article::getCurrentId() mit der Id des Artikels überschrieben werden. Bei mehrsprachigen Installationen muss auch die aktuelle Sprach-Id rex_clang::getCurrentId() durch die Sprach-Id des Artikels ersetzt werden. Artikel-Id und Sprach-Id sind aus dem URL des anzuzeigenden Artikels, d. h. aus der Variablen $_SERVER['REQUEST_URI'], zu ermitteln.
 
 
Elemente der URL-Darstellung:
Für die Darstellung eines URLs werden bei der Installation des AddOns die folgenden Meta Infos angelegt, als Zeilen in der Tabelle rex_metainfo_field und als Spalten in der Tabelle rex_article. Sie werden bei der De-Installation nicht wieder entfernt.
  • cat_dirname :   "Verzeichnisname" für jede Kategorie, Default: Kategoriename (catname)
  • art_basename :   "Dateiname" für jeden Artikel, Default: Artikelname mit Namenserweiterung (name.html), für Kategorie-Startartikel wird der Artikelname durch "index" ersetzt ("Dateiname": index.html)
  • art_custom_url :   aus den obigen Daten generierter Artikel-URL (Custom URL, ohne führenden "/"), ablesbar (readonly) in den Metadaten des Artikels, den Wert (mit führendem "/") liefert die Standardfunktion rex_getUrl(article_id), er ist für alle Sprachversionen gleich
Erlaubte Zeichen für die Meta Infos sind: Buchstaben, Ziffern, Punkt(.), Minuszeichen(-), Unterstrich(_), nicht erlaubt sind u.a. Umlaute oder Leerzeichen. Startartikelname und Namenserweiterung können auch anders konfiguriert werden.

Kennzeichnung der Sprache:
Die Kennzeichnung der Sprache erfolgt mittels der definierten Sprachcodes, wahlweise durch
  • eine Erweiterung des angezeigten URLs um den voran gestellten Sprachcode (/en/cat_dirname1/...) oder
  • eine Erweiterung des angezeigten URLs um einen language-Parameter (.../art_basename?language=en) oder
  • eine Session-Variable $_SESSION['language']='en', ein Sprachwechsel erfolgt hier mittels language-Parameter im Link (vergl. vorige Zeile).
Die Art der Kennzeichnung ist konfigurierbar. Bei der Standardsprache und damit auch bei einsprachigen Installationen entfällt sie ganz.

AddOn-Download