Das Plugin Advanced Mod Rewrite ist eine Erweiterung für das CONTENIDO-CMS zur Generierung von alternativen URLs.

Normalerweise werden die URLs zu Seiten einer auf ein CMS (z. B. CONTENIDO) basierenden Webpräsenz nach dem Muster /index.php?page=12&language=de generiert, also in Form von dynamischen URLs. Eine Möglichkeit solche dynamische URLs zu Webseiten, deren Inhalt in der Regel aus Datenbanken kommen, gegen statische URLs wie z. B. /de/page-name.html umzustellen, gibt es in Kombination mit dem Apache mod_rewrite-Modul. Dabei werden die URLs zu den Seiten als sogenannte "Clean URLs" ausgegeben, Requests zur der gewünschten Ressource werden vom Webserver nach definierten Regeln verarbeitet und intern an die Webanwendung weitergeleitet.

Solche statische URLs können aufgrund der Keyworddichte (die Ressource beschreibende Wörter in der URL) vorteilhaft für Suchmaschinen sein und User können sich die URLs einfacher merken.

Bei einer CONTENIDO-Installation lassen sich solche URLs mit dem Advanced Mod Rewrite Plugin generieren, URLs zu Frontendseiten, wie z. B. /cms/front_content.php?idart=12&lang=1 werden vom Plugin als statische URLs wie /de/page-name.html ausgegeben. Diverse Einstellungen zum Ausgabeformat der URLs lassen sich im CONTENIDO-Backend konfigurieren.

Das Plugin Advanced Mod Rewrite basiert auf die geniale Erweiterung Advanced Mod Rewrite für CONTENIDO, welches als Bundle von stese bis zur CONTENIDO Version 4.6.15 entwickelt und betreut wurde.


Changelog:

  • 2013-11-04: Advanced Mod Rewrite Plugin 0.6.0 (for CONTENIDO 4.8.16 - 4.8.18)
    • bugfix: Enabled acess to pages by newsletter plugin
    • bugfix: Corrected wrong setting of XHTML valid ampersand in UrlBuilder
    • bugfix: Extended duplicate content check for other settings than "start from root"
    • bugfix: Adapted table creation statement to MySQL >= 5.5
    • change: Moved plugin location in backend from "Content" to "Extras"
    • change: Moved test script (mr_test.php) from client folder to backend
    • change: Removed dependencies to classes in directory contenido/classes/mp
    • change: Splitted plugin page in backend into three pages
    • change: Extended rules in .htaccess templates
    • change: Added multilanguage support (German and English)
    • change: Reworked plugin installer to have better error handling and being usable for other plugins than AMR
    • new: Added option to generate urls without category path but article aliases
  • 2010-02-23: Advanced Mod Rewrite Plugin 0.5.5 (for CONTENIDO 4.8.10 - 4.8.18)
    • bugfix: Fixed some potential security vulnerabilities
    • bugfix: Replaced german umlauts which may result in broken characters depending on configured encoding
    • bugfix: Category synchronization sets now urlpath of synchronized categories
    • bugfix: Renaming of categories updates also urlpaths of subcategories
    • bugfix: Removed old plugin related entries from database tables
    • bugfix: Takeover query parameter of routed URLs into superglobal $_GET
  • 2009-05-10: Advanced Mod Rewrite Plugin 0.5.4 (for CONTENIDO 4.8.10 - 4.8.12)
    • bugfix: Wrong URL generation to articles having same alias in different languages
    • bugfix: Added missing preclean of previous percieved URLs to URL stack handler
    • bugfix: Deactivated plugin related header output in mr_header()
    • bugfix: Some comments in htaccess_simple.txt caused an server error
    • change: Removed plugins CEC 'Contenido.Frontend.CreateURL' from CONTENIDO chain configuration to plugins configuration
    • new: Added handling of ports in URLs and also URL query items being an array (e. g. foo[bar]=1) to UrlBuilder
  • 2009-02-08: Advanced Mod Rewrite Plugin 0.5.3 (for CONTENIDO 4.8.10 - 4.8.11)
    • bugfix: Occurance of invalid frontend URLs result in invalid rewritten URLs to root
    • bugfix: Defined separator modified client path, which is not desired
  • 2009-01-18: Advanced Mod Rewrite Plugin 0.5.2 (for CONTENIDO 4.8.10)
    • change: Adapted to CONTENIDO 4.8.10
    • change: Additional .htaccess with easy to handle rewrite rules
    • bugfix: Calling the method getmicrotime() ends in PHP error during CONTENIDO installation (thanks to josh, see CONTENIDO forum)
    • bugfix: Corrected missing language switch detection (thanks to lunsen_de, see CONTENIDO forum)
  • 2008-12-24: Advanced Mod Rewrite Plugin 0.5.1 (for CONTENIDO 4.8.9)
    • change: Adapted to CONTENIDO 4.8.9
    • change: Includes the fixes for redirection issues (see CONTENIDO forum)
  • 2008-12-21: Advanced Mod Rewrite Plugin 0.5.0 (for CONTENIDO 4.8.8)
    • bugfix: Fixed invalid creation of URLs (thanks to Polardrache, see CONTENIDO forum)
    • bugfix: Added case sensitive handling of paths to plugins path resolver
    • change: Some cleanup
  • 2008-11-25: Advanced Mod Rewrite Plugin 0.5.0rc (for CONTENIDO 4.8.8)
    • bugfix: Corrected wrong handling of similar categories/articles in different languages (thanks to Tbird, see CONTENIDO forum)
    • change: Adaption of sources to PHP5 coding standards
    • change: Redesigned handling of userdefined category-/article separators
    • change: Modified plugin installer (source and template)
    • new: Feature to reduce database queries during URL creation
  • 2008-09-08: Advanced Mod Rewrite Plugin 0.4.5 (for CONTENIDO 4.8.8)
    • change: Adapted to CONTENIDO 4.8.8
    • change: Moved index_controller.php into plugin include dir, .htaccess substitutes now to front_content.php
    • change: Enhanced resolving process of incomming urls
    • bugfix: Wrong resolving of paths if option "Create categories and articles as HTML ressource" is selected (thanks to speedmaster, see CONTENIDO forum)
    • new: Added new Chain to process resolving at front_content.php
  • 2008-09-03: Advanced Mod Rewrite Plugin 0.4.4 (for CONTENIDO 4.8.7)
    • bugfix: Wrong URL creation in front_content.php (thanks to mojo, see CONTENIDO forum)
    • bugfix: Corrected invalid replacement for base href interpretation (thanks to Tbird, see CONTENIDO forum)
    • bugfix: Fixed URL creation, now Urls starting with '/front_...' or './front_...' will also be identified, affects also defined redirect urls in article properties
    • change: Replaced adding of PHP4 handler against PHP5 handler in .htaccess (thanks to Supporter, see CONTENIDO forum)
    • new: New client setting for articles, which are to exclude from output processing
  • 2008-08-12: Advanced Mod Rewrite Plugin 0.4.3 (for CONTENIDO 4.8.7)
    • bugfix: Added missing framework initialization to plugin installer
    • bugfix: Workaround for non set variables in globals_off.inc.php
    • bugfix: Corrected wrong handling of configuration parameter 'startfromroot'
    • bugfix: Article word separator was not used correct
    • change: New rule to catch another exploit in .htaccess
    • change: Improved performance of class ModRewrite
    • change: Extended ConfigBase and ConfigSerializer, added lifetime control for cached data
    • new: Testscript (/cms/mr_test.php) to validate functionality of the plugin
  • 2008-08-03: Advanced Mod Rewrite Plugin 0.4.0 (for CONTENIDO 4.8.7)
    • change: Adapted to CONTENIDO 4.8.7
    • bugfix: Error at validation of defined .htaccess file, if client docroot differs from CONTENIDO backend docroot (thanks to tono, see CONTENIDO forum)
    • bugfix: Calling of parse_url results in a PHP warning, if the URL is invalid
    • bugfix: Prevention of duplicated content, which occurs, if prepending of root category to the url is activated (thanks to philla, see CONTENIDO forum)
    • change: Enabling routing definition from root
    • change: Removed execution of CEC_Hook to build URLs from $sess->url() and $sess->self_url()
    • new: New Contenido_UrlBuilder_MR class based on CONTENIDO UrlBuilder specifications. NOTE: Plugin is no more PHP4 compatible!
  • 2008-07-20: Advanced Mod Rewrite Plugin 0.3.3 (for CONTENIDO 4.8.6)
    • new: Some new rules in .htaccess to precatch common exploits
    • change: Removal of nonused function mr_get_setting_override()
    • bugfix: Calling of parse_url results in a PHP warning, if the URL is invalid
    • bugfix: Instantiating of cApiArticleLanguage throws an error in some cases (thanks to TripleM, see CONTENIDO forum)
    • bugfix: Usage of $auth->url()/$auth->purl() returns Scriptname which isn't front_content.php (thanks to stefkey, CONTENIDO forum)
  • 2008-06-22: Advanced Mod Rewrite Plugin 0.3.2 (for CONTENIDO 4.8.6)
    • bugfix: Corrected wrong handling of category aliases (thanks to Supporter, see CONTENIDO forum)
  • 2008-06-18: Advanced Mod Rewrite Plugin 0.3.1
    • new: Added SQL-Statements for pluginupdate
    • change: Adapted to CONTENIDO 4.8.6
    • bugfix: Later setting of article urlname won't work (see CONTENIDO forum)
  • 2008-05-26: Advanced Mod Rewrite Plugin 0.3.0
    • change: Adapted to CONTENIDO 4.8.4
    • bugfix: Usage of new configuration in ModRewriteController::_setIdart() instead of clientsetting
    • new: Feature to add default articlenames (userdefined name or name of startarticle) to created category URLs
    • change: Some cleanup and improvement of query execution
  • 2008-05-20: Advanced Mod Rewrite Plugin 0.2.1rc
    • bugfix: Hard coded path in include.mod_rewrite_content.php (thanks to tono)
    • bugfix: Added file_put_contents() function in file class.confighandler.php to support PHP4 (thanks to tono)
    • bugfix: Added missed handling of defined rootdir for .htaccess file in class.modrewritecontroller.php (thanks to tono)
  • 2008-05-19: Advanced Mod Rewrite Plugin 0.2rc
    • first release

Features:

  • Erstellung Suchmaschinenoptimierter URLs, CONTENIDO interne URLs wie /front_content.php?idcat=12&idart=34 werden z. B. als /kategoriename/artikelname.html umschrieben
  • Unterstützung mehrerer Sprachen
  • Unterstützung mehrerer Mandanten im gleichen Verzeichnis
  • Umschreiben der URLs entweder bei der Ausgabe des HTML Codes oder beim Generieren des Codes der Seiten
  • Routing von URLs (Umleiten eingehender URLs auf andere Ziel-URLs)

Voraussetzungen:

  • Alle Voraussetzungen von CONTENIDO 4.8.x gelten auch für das Plugin
  • PHP ab Version 5.1 (Das Plugin war bis Version 0.3.3 PHP 4.4.x kompatibel)
  • Apache HTTP Server 2 mit Mod Rewrite

Installation:

  • Backup der CONTENIDO Installation also der Sourcen und der Datenbank (Damit es ein Weg zurück gibt)
  • Kopieren aller Dateien in die entsprechenden Verzeichnisse.
  • Schreibrechte für PHP in das Verzeichnis /contenido/plugins/mod_rewrite/includes/ setzen. Das Plugin speichert die Advanced Mod Rewrite Konfiguration der Mandanten in das Verzeichnis.
    (Der einfachste Weg ist das Setzen der Rechte auf 777, empfohlen ist eine restriktivere Vergabe)
  • In die Adresszeile des Browsers https://localhost/contenido/plugins/mod_rewrite/install.php eingeben, dann sollte das Anmeldefenster des Backends erscheinen.
    ("https://localhost/" ist eventuell gegen anderen virtual Host oder Domainnamen zu ersetzen)
  • Im Backend anmelden
  • Advanced Mod Rewrite Plugin installieren
  • HINWEIS: Der Plugininstaller erstellt eine Kopie der Tabelle "{prefix}_plugins_{YYYYMMDD}", falls die Tabelle die Voraussetzungen des Plugins nicht erfüllt. Wenn vorher Plugins installiert wurden, müssen die Einträge von der Kopie der Tabelle manuell in die neue Tabelle übernommen werden.
  • Advanced Mod Rewrite konfigurieren (Im Backend unter Menü "Content" -> "Advanced Mod Rewrite")
  • Über "Extras -> AMR -> Funktionen" entweder eine .htaccess Vorlage in das Contenido Installations- verzeichnis kopieren, oder die Vorlage herunterladen und manuell in das Verzeichnis ablegen.
    Sollte sich im Verzeichnis schon eine .htaccess befinden, dann einfach die mod_rewrite Regeln des AMR Plugins übernehmen.

Weitere Hinweise zur Installation/zu Upgrades:

Sollte ein Ugrade oder eine Neuinstallation des Plugins nötig sein, weil z. B. die CONTENIDO- Version einem Upgrade unterzogen wurde, ist auch ein Upgrade für das Plugin nachzuziehen. Eine ausführliche Beschreibung dazu gibt es unter
https://forum.contenido.org/viewtopic.php?p=119362#p119362

Beim Extrahieren des Installationsarchives in eine tiefe Ordnerstruktur, kann es vorkommen, dass unter Windows die maximale Länge des Pfades zu Dateinamen überschritten wird. Unter Windows ist es nicht möglich, dass Pfade mehr als 255 Zeichen enthalten.
Ratsam ist es, wenn das Archiv unter Windows z. B. unter C:\ oder C:\temp\ extahiert, und dann von dort in das eigentliche Zielverzeichnis kopiert wird.

Update auf Version >= 0.5.0:

Die Behandlung der benutzerdefinierten Separatoren wurde in der Version 0.5.0 (rc) grundlegend geändert. Daher sollte bei einem Update des Plugins von Version <= 0.4.5 auf Version >= 0.5.0 die Konfiguration gegebenenfalls angepasst werden - es kann sein, dass die vorher gesetzten Separatoren bei einem Update nicht korrekt erkannt und übernommen werden.

Anpassen der Module des Beispielmandanten:

Die CONTENIDO Module des Beispielmandanten verwenden seit der CONTENIDO-Version 4.8.11, die neue UrlBuilder-Funktionalität.
In den Modulcodes werden URLs generiert, die nicht Kompatibel mit dem AMR-Plugin sind - Daher sind an den Modulen noch kleinere Anpassungen nötig, die im Forum ausführlich beschrieben sind.


Wichtiges zum Inhalt

Allgemein

contenido/plugins/mod_rewrite/*:
Die Sourcen des Plugins.

contenido/classes/UrlBuilder/Contenido_UrlBuilder_MR.class.php:
UrlBuilder Klasse des Plugins (seit Version 0.4.0), zum Generieren der URLs anhand der Pluginkonfiguration. Verwendet die in den CONTENIDO Core implementierte UrlBuilder-Funktionalität und erweitert diesen um die pluginspezifischen Features.

Version >= 0.5.0

Handhabung von Separatoren:
Die Aliase für Kategorie-/ und Artikelnamen werden im Gegensatz zu früheren Versionen nicht mit den in der Pluginkonfiguration definierten Trennzeichen gespeichert, sondern mit den in CONTENIDO per default gesetzten Trennzeichen "-". Die Entscheidung zur dieser Vorgehensweise wurde gefällt, um der CONTENIDO-Installation nicht die Pluginkonfiguration "aufzuzwingen", sondern die pluginspezifischen Einstellungen "on the fly" während der Ausgabe zu setzen.

Die Flexibilität, die das Plugin über das Setzen der benutzerdefinierten Separatoren bietet, bedarf einer einheitlichen, maschinell bearbeitbaren Struktur der Aliase, daher sind Aliase, die aus mehreren Wörtern oder mit Leerzeichen zusammengesetzten Zeichen bestehen, mit einem Bindestrich "-" anzugeben.

Bei der Ausgabe der URLs, werden dann die Bindestriche gegen die in der Pluginkonfiguration gesetzten Separatoren ersetzt - Beispiel:

Artikelname:           CONTENIDO Highlights
Artikelalias:          CONTENIDO-Highlights
Artikelwort-Separator: _
Ausgabe in der URL:    CONTENIDO_Highlights

Kategoriename:           Was ist CONTENIDO
Kategoriealias:          Was-ist-CONTENIDO
Kategoriewort-Separator: ~
Ausgabe in der URL:      Was~ist~CONTENIDO

Der Nachteil dabei ist natürlich, dass man bei der Vergabe der Aliase nicht mehr flexibel ist, und sich an die Vorgaben des Plugins richten muss.


FAQ

Der Plugininstaller lässt sich nicht aufrufen, wie kann ich dennoch das Plugin installieren?

Normalerweise wird der Plugininstaller mit folgender URL aufgerufen:
https://localhost/contenido/plugins/mod_rewrite/install.php
("https://localhost/" ist eventuell gegen anderen virtual Host oder Domainnamen ersetzen).

Es erscheint das Anmeldeformular zum Backend, über den man sich am System anmelden kann. Nach erfolgreicher Anmeldung wird man normalerweise zum Plugininstaller weitergeleitet.

Manchmal kann es vorkommen, dass die Weiterleitung nach der Anmeldung nicht klappt und man nicht den Plugininstaller aufrufen kann.
Um dennoch den Installer aufzurufen, reicht es aus, der URL die aktuell gültige CONTENIDO Session ID anzuhängen, z. B. /contenido/plugins/mod_rewrite/install.php?contenido={my_session_id}.

Wie teste ich, ob mod_rewrite am Server richtig konfiguriert ist?

Obwohl mod_rewrite am Server installiert ist, kommt es manchmal vor, dass es nicht funktioniert.

Das kann einfach getestet werden, erstelle eine .htaccess im Rootverzeichnis und schreibe folgendes rein:

RewriteEngine on
RewriteRule ^ https://www.contenido.org [R,L]

Nach Eingabe der URL in die Adresszeile des Browsers, sollte auf www.contenido.org weitergeleitet werden.
Wenn nicht, dann kann eines der folgenden Punkte der Grund dafür sein:

Das mod_rewrite Modul ist nicht geladen, das ist in der httpd.conf zu setzen

LoadModule rewrite_module modules/mod_rewrite.so

Die Direktive "AllowOverride" ist nicht korrekt gesetzt. Damit die Angaben in der .htaccess auch benützt werden können, muss für das betreffende Verzeichnis die Direktive "AllowOverride" in der httpd.conf angegeben werden:

# Beispielkonfiguration
<Directory "/var/www/mywebproject">
AllowOverride FileInfo
</Directory>

Wie richte ich Advanced Mod Rewrite für eine CONTENIDO-Installation in einem Unterverzeichnis ein?

Als Beispiel gehen wir davon aus, dass CONTENIDO im Verzeichnis /mypage/ unterhalb vom Webroot installiert wurde und das Mandantenverzeichnis per default /mypage/cms/ ist.

In der Pluginkonfiguration (Backend) den Pfad zur .htaccess Datei (aus Sicht des Web-Browsers) folgendermaßen anpassen:

/mypage/

Die /mypage/.htaccess öffnen und die RewriteBase folgendermaßen anpassen:

RewriteBase /mypage/cms/

Welche Einstellungen sind nötig, wenn das Mandantenverzeichnis das wwwroot ist?

Normalerweise liegt das Mandantenverzeichnis innerhalb des wwwroot und ist über https://domain.de/cms/front_content.php erreichbar.
Manchmal ist es erwünscht, dass der Ordner /cms/ bei deaktiviertem Mod Rewrite in der URL nicht sichtbar sein soll, oder Mandatenverzeichnis selber liegt im wwwroot - das Frontend ist dann z. B. über https://domain.de/front_content.php erreichbar.

In diesem Fall sind zwei Anpassungen nötig, damit Mod Rewrite korrekt funktioniert:
1. Die .htaccess Datei in das Verzeichnis /cms/ kopieren, da die Datei im wwwroot sein muss.
2. In der .htaccess die RewriteBase Option anpassen

# von
RewriteBase /cms

# auf
RewriteBase /

Wie kann ich das Verarbeiten bestimmter Seiten vom Plugin unterbinden?

Wenn das Plugin so konfiguriert wurde, dass die URLs bei der Ausgabe des HTML Codes der Seite angepasst werden, kann dieses Verhalten bei manchen Seiten unerwünscht sein. Das kann bei einer Ausgabe der Fall sein, dessen Inhalt kein HTML ist (z. B. Dateidownload), dann macht es keinen Sinn, die Ausgabe anzupassen.

Ab CONTENIDO 4.8.8 gibt es eine neue Einstellung, mit der man unterbinden kann, dass die Ausgabe im Frontend nicht in den Ausgabepuffer geschrieben wird. Ist dies für eine Seite definiert worden, wird auch die Funktion vom Plugin, die die URLs anpasst, nicht ausgeführt.

Einstellen lässt sich das über Mandanteneinstellungen wie folgt:

Typ: frontend.no_outputbuffer
Name: idart
Wert: 12,14,40

Inhalte der Artikel mit der id 12, 14 und 40 werden dann von der Ausgabepufferung ausgeschlossen.

Warum werden URLs trotz richtiger Voraussetzungen nicht umschrieben?

Ist die .htaccess und die Konfiguration des Plugins als Fehlerquelle auszuschließen und das Plugin soll die URLs bei der Ausgabe der Seite umschreiben (Standardeinstellung), könnte ein vorzeitig geleerter Ausgabepuffer der Grund sein.

In der front_content.php wird der HTML-Code in den Ausgabepuffer geschrieben, damit der Code vor der endgültigen Ausgabe bearbeitet werden kann. Das Plugin fügt der Chain "Contenido.Frontend.HTMLCodeOutput" eine eigene Funktion, die den Code aus dem Ausgabepuffer erhält, um die darin vorkommenden URLs zu umschreiben.

Wird aber der Ausgabepuffer vorher geleert, z. B. durch Verwendung von ob_flush() in einem Modul, wird der Code direkt an den Client rausgeschickt. Das hat den Effekt, dass in der front_content.php kein Code mehr aus dem Ausgabepuffer zur Verfügung steht, der nicht weiterverarbeitet werden kann, auch das Plugin kann dann keine URLs umschreiben.

Alle URLs zu Kategorien werden mit / oder /index.html umschrieben:

Ist CONTENIDO mit der Konfiguration $cfg["is_start_compatible"] = true; (siehe contenidoincludes/config.php) eingestellt, um die Startartikeldefinition in Kategorien kompatibel zu älteren CONTENIDO-Versionen halten, kann das Plugin die URLs zu Kategorien nicht generieren, weil es diese Konfiguration nicht unterstützt.

Die einfachste Lösung ist, die Konfiguration $cfg["is_start_compatible"] auf false zu setzen und im Backend in den vorhandenen Kategorien erneut die Startartikel zu setzen.


Advanced Mod Rewrite Themen im CONTENIDO Forum

 

Ältere Downloads anzeigen