Software-Entwicklungen

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