AddOn


Einfaches URL-Rewrite für Redaxo 5

Beschreibung

Dieses AddOn ist eine Erweiterung des Standard-Rewriters undnutzt den Extension Point URL_REWRITE.
Es dient im Wesentlichen nur als exemplarische Einführungin die Funktionsweise des Rewriters. Der Artikel-URL wirdhier in einer besonders einfachen Form aus Artikel-Id,Sprach-Code und Artikelname gebildet: ID-CODE-NAME.html. Seiten können aber auchüber den Redaxo-Standard-URL 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, metainfo, 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.

Ausblick auf reale Wunsch-URLs:
Im Allgemeinen sind Artikel-Id und Sprach-Id nicht so einfach wie hier zu ermitteln. Aber der beschriebene Rahmen kann generell beibehalten werden. Zu beachten ist:
Zu einem Link auf eine Seite im Frontend muss derzugehörige Artikel samt Sprachversion eindeutig zuermitteln sein.
Um den Aufwand für die Ermittlung des Artikels unddamit die Belastung des Servers möglichst gering zuhalten, kann der URL z. B. als zusätzlicherArtikelparameter (Meta Info) mitgeführt werden. DerAufwand würde dadurch in Teilen auf die Arbeit desRedakteurs im Backend verlagert.
Für die Konstruktion des Wunsch-URL bietet sich einRückgriff auf den path-Parameter des Artikelsan.
Die Kennzeichnung der Sprachversion im Frontend kannim URL mitgeführt werden, alternativ aber auch z. B.in einer Session-Variablen.


Umsetzung

Wolfgang Busch

An der Windmühle 3
38173 Dettum

busch-dettum.de


Versionen

2.0

Für REDAXO
^5.1.0
Veröffentlicht am
23.06.2019

Der Code ist vollständig überarbeitet und mit ‘error_reporting(E_ALL);’ überprüft.
Der Extension Point FE_OUTPUT wird nicht benötigt und daher nicht mehr benutzt.
Der gesamte Source-Code ist auf UTF-8 umgestellt.
Alle im AddOn verwendeten Functions sind in einer Klasse im Ordner lib zusammengefasst.

1.2.7

Für REDAXO
^5.1.0
Veröffentlicht am
23.01.2018

Artikel werden jetzt aus ihrem URL gefunden, auch wenn letzterer Blanks, Sonderzeichen oder Umlaute enthalten (wichtig für Navigationen).

1.2.6

Für REDAXO
^5.1.0
Veröffentlicht am
02.12.2017

Der englische Sprachzweig ist angelegt (Datei en_gb.lang im Ordner lang). Eine Übersetzung der gesamten Beschreibung ist nicht vorgesehen.

1.2.5

Für REDAXO
^5.1.0
Veröffentlicht am
01.12.2017

Die ungenutzten Dateien install.php und uninstall.php entfallen jetzt.
Die Software ist natürlich gemäß MIT-Lizenz frei nutzbar, nachlesbar in einer neuen Datei LICENSE.md.

1.2.4

Für REDAXO
^5.1.0
Veröffentlicht am
23.11.2017

An etlichen Stellen werden jetzt anstelle der Methode getValue(“value”) die Redaxo 5-spezifischen Methoden getClang(), getTemplateId(), getName(), IsOnline() eingesetzt.

1.2.3

Für REDAXO
^5.1.0
Veröffentlicht am
07.11.2017

Neue Behandlung der Normalform-URLs

1.2.2

Für REDAXO
^5.1.0
Veröffentlicht am
17.10.2017

Überarbeitung der Beschreibung

1.2.1

Für REDAXO
^5.1.0
Veröffentlicht am
12.10.2017

Für den Normalform-URL wird jetzt der Redirect auf den NotFound-Artikel sauberer durchgeführt.
Außerdem ist der Quellcode etwas gestrafft.

1.2.0

Für REDAXO
^5.1.0
Veröffentlicht am
28.09.2017

Die Werte der Funktionen rex_article::getCurrentId() und rex_clang::getCurrentId werden jetzt entsprechend dem angezeigten Artikel angepasst.

1.1.0

Für REDAXO
^5.1.0
Veröffentlicht am
08.09.2017

Ersatz für die nicht mehr “funktionierenden” Funktionen rex_article::getCurrentId() und rex_clang::getCurrentId().
Verlegung der function get_article() von der class url_rewrite in die class fe_output.
Offline-Artikel werden nicht mehr angezeigt; stattdessen der Notfound-Artikel.

1.0.0

Für REDAXO
^5.1.0
Veröffentlicht am
13.07.2017