AddOn


Einfaches URL-Rewrite

Beschreibung

Dieses AddOn ist eine Erweiterung des Standard-Rewriters und nutzt den Extension Point URL_REWRITE. Es soll im Wesentlichen nur als exemplarische Einführung in die Funktionsweise des Rewriters und als Gerüst für die Entwicklung komplexerer Rewriter dienen.

Zur Manipulation des Frontend-Output wird eine Erweiterung des Extension Point FE_OUTPUT genutzt.

Der Artikel-URL wird automatisch generiert in der Form article_id-clang-name.html.

Ein URL hat in Redaxo die Normalform index.php?article_id=ID&clang=CID mit Verweis auf die Artikel-Id ID mit der Sprach-Id CID. In der Regel soll stattdessen jeder Artikel einen “Wunsch-URL” erhalten, aus dem Hinweise auf Themen-Kategorien und den Artikelinhalt entnommen werden können. In diesem AddOns werden dazu die Id, der Sprach-Code und der Name des Artikels herangezogen. Als Besonderheit: Ein URL in Normalform als Link oder im Browser-Adressfeld liefert ebenfalls den richtigen Artikel-Inhalt.

RewriteRule in der .htaccess-Datei
Mit der folgenden RewriteRule werden alle nicht auf Dateien weisenden URLs auf die Datei /index.php umgeleitet: RewriteRule ^(.*)$ index.php?%{QUERY_STRING} [L] Da Redaxo keinen entsprechenden Artikel hat, landet die Umleitung auf dem Site-Startartikel.

Setzen des Wunsch-URLs
Das erfordert eine Erweiterung des Extension Point URL_REWRITE. Die am Extension Point aufgerufene Funktion gibt den Wunsch-URL zurück. Deren Eingabeparameter ist ein Objekt, das Id und Sprach-Id eines Artikels enthält.
Backend: Die Funktion wird nur im Content-Kontext des Artikels (edit, metainfo, functions) aufgerufen. Eingabeparameter sind Id und Sprach-Id des gerade bearbeiteten Artikels. Der zurückgegebene URL liefert den Wert der Variablen $_SERVER[“REQUEST_URI”] und erscheint im Frontend im Adressfeld des Browsers.
Frontend: Eingabeparameter der Funktion ist hier gemäß .htaccess-Datei (vergl. oben) die Artikel-Id des Site-Startartikels. Daher muss aus dem angezeigten URL der wirklich anzuzeigende Artikel ermittelt werden. Der zurückgegebene URL liefert den Rückgabewert der Funktion rex_getUrl($article_id).

Manipulation des Frontend-Outputs
Ohne eine solche würde der Browser bei jedem URL immer den Site-Startartikel anzeigen. Die Manipulation erfordert eine Erweiterung des Extension Point FE_OUTPUT. Dessen Funktion wird nur im Frontend-Fall aufgerufen und hat keine Eingabeparameter. Aus dem URL des angezeigten Artikels wird der anzuzeigende Artikel samt Sprach-Id ermittelt. Zur Anzeige gebracht wird dann ein neuer Artikel mit den Parametern des anzuzeigenden Artikels.
Nachteil dieser Methode ist, dass im Frontend-Kontext in Templates und Modulen die Artikel-Id und die Sprach-Id nur aus dem Artikel-Objekt $this ausgelesen werden können. Die Funktionen rex_article::getCurrentId() und rex_clang::getCurrentId() lesen aus dem Site-Startartikel.

Ausblick auf komplexere Wunsch-URLs
Beim URL-Rewrite sind die beiden folgenden Aufgaben zu lösen: 1) Konstruktion des Wunsch-URL aus Artikel-Id und Sprach-Id (Backend) 2) Ermitteln des Artikels samt Sprach-Id zu einem URL (Frontend und Output) Wenn der URL als zusätzlicher Artikel-Parameter (Metainfo) mitgeführt wird, ist Aufgabe 2 relativ einfach und effizient über ein SQL-Select auf die Tabelle rex_article lösbar. Zur Lösung von Aufgabe 1 bietet sich der path-Parameter des Artikels und ein Rückgriff auf den Artikel-Cache an.


Umsetzung

Wolfgang Busch

An der Windmühle 3
38173 Dettum

busch-dettum.de


Versionen

1.0.0

Für REDAXO
^5.1.0
Veröffentlicht am
13.07.2017