3.5.3 mod_rewrite

In der Url-Zeile Ihres Browsers werden die einzelnen Artikel über die Seite index.php mit
dem Parameter article_id aufgerufen.

http://www.redaxo.de/index.php?article_id=1

Moderne Suchmaschinen sind zwar in der Lage dynamisch erzeugte Seiten (z. B. “index.php?seite=12&inhalt=3&foo=bar”) zu indizieren und in den Index aufzunehmen, jedoch haben auch sie Schwierigkeiten wenn die Anzahl der übergebenen Parameter zu gross wird. Um die Url suchmaschinenfreundlicher zu gestalten, steht auch in REDAXO ein ModRewrite zur Verfügung.

mod_rewrite ist ein Apache Modul für die URL Manipulation. Mit der RewriteEngine des Apache-Webservers ist es möglich die angeforderte URL anhand von Regeln “umzuschreiben”. Basierend auf einem Parser für Reguläre Ausdrücke kann die angeforderte URL manipuliert werden.

In den REDAXO 4.* zips befindet sich in der obersten Ebene eine _.htaccess-Datei mit folgendem Inhalt:

RewriteEngine On

# RewriteBase /
RewriteRule ^([0-9]*)-([0-9]*)- index.php?article_id=$1&clang=$2&%{QUERY_STRING}
RewriteRule ^([0-9]*)- index.php?article_id=$1&%{QUERY_STRING}

MOD_REWRITE-Modus

Diese muss in .htaccess umbenannt werden! Ab 4.3 muss die Datei nicht umbenannt werden, da sie schon direkt als “.htaccess” vorliegt.

In Redaxo muß unter System der MOD_REWRITE-Modus eingeschaltet werden (Auf true stellen).

Nun werden alle URLs, die über die Funktion

rex_getUrl($articleId, $sprachId, $parameterArray);

angesprochen werden, umgewandelt in eine lesende URL, die htaccess dann interpretiert.

Konfiguration der htaccess

Bei diesem Eintrag gehen wir davon aus, das die Dateien im ROOT-Verzeichnis geladen sind. Sollte die Webseite mit den Dateien in einem Unterordner geladen sein, dann sollte der Eintrag in der 3. Zeile (RewriteBase) angepasst werden.

Webseite im Ordner “xyz”:

RewriteBase /xyz

Urls erstellen

Um in REDAXO Urls zu erstellen sollte mit der rex_getUrl Funktion gearbeitet werden.

Wechseln zwischen Sprachen: (Wechselt von der aktuellen Sprache auf die Sprache mit der Id 3)

<?php
echo '<a href="'. rex_getUrl(1, 3) .'">linktext</a>';
?>

Parameter übergeben

URLs, die Parameter enthalten, sollte wie folgt erstellt werden:

Dieses Beispiel beschreibt den Wechsel auf den Artikel mit der Id=1, die aktuelle Sprache wird beibehalten, und es wird ein Parameter übergeben.

<?php
echo '<a href="'. rex_getUrl(1, '', array('name' => 'wert')) .'">linktext</a>';
?>