Dieses Addon bietet eine Möglichkeit, REDAXO mit mehreren Domains zu betreiben. Mehrere Domains können dann sinnvoll sein, wenn
- mehrere Websites eines Kunden in einer Installation verwaltet werden,
- verschiedene Sprachen (
clang
) einer Website unter unterschiedlichen Domains oder Subdomains erreichbar sind, - oder beides.
Tipp: Wir empfehlen im ersten Fall, für jede einzelne Domain in der Struktur auf der obersten Ebene eine Kategorie anzulegen.
- Mehrere Domains in einer Webseite verwaltbar
- Sprachabhängigkeiten von Domains zuweisbar
- SEO Features: Domain- und sprachabhängige robots und sitemap Dateien
- Individuelle URL pro Artikel möglich
- Seitentitel Schema definierbar / pro Domain/Sprache
- Alias Domains die auf die Hauptdomain verweisen
- Allgemeine Weiterleitungen. URLs zu internen Artikeln, Dateien, externen Artikeln
- Canonical Urls
Voraussetzung für die aktuelle Version von YRewrite: REDAXO >= 5.5
- Über das REDAXO-Backend installieren und aktivieren
- Setup ausführen
Nach der Installation und dem Abschluss des Setups wird eine .htaccess
-Datei im Hauptverzeichnis erstellt, die für die Verwendung von YRewrite benötigt wird. Auch eine virtuelle robots.txt
und sitemap.xml
werden erstellt.
Unter dem Reiter Setup
kann die .htaccess
-Datei jederzeit neu geschrieben werden Außerdem sind die sitemap.xml
und robots.txt
je Domain einsehbar.
Hinweis: Das Addon leitet alle Anfragen von
/media/
über das Media-Manager-AddOn. Stelle daher sicher, dass es weder eine Struktur-Kategorie "Media" gibt, noch, dass sich keine deiner Dateien fürs Frontend, bspw. CSS- oder JS-Dateien, darin befinden. Gute Orte hierfür sind die Ordner/assets/
oder die Verwendung des Theme-AddOns. Sollte es notwendig sein, eine Kategorie namens "Media" zu verwenden, dann müssen die entsprechenden Zeilen in der .htaccess-Datei auskommentiert oder umbenannt werden und diese fortan genutzt werden, wenn Medien aus dem Medien Manager verwendet werden. Dies hat weitere Auswirkungen, z.B. auf geschützte Dateien mit YCom - das Auskommentieren und Umbenennen sollte daher nur von erfahrenen REDAXO-Entwicklern vorgenommen werden.
Eine vollständige nginx config für YRewrite.
Hinweis für PLESK-Websites: Die Direktiven können unter Einstellungen für Apache & nginx der gewünschten Domain im Abschnitt Zusätzliche nginx-Anweisungen hinterlegt werden.
charset utf-8;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
rewrite ^/sitemap\.xml$ /index.php?rex_yrewrite_func=sitemap last;
rewrite ^/robots\.txt$ /index.php?rex_yrewrite_func=robots last;
rewrite ^/media[0-9]*/imagetypes/([^/]*)/([^/]*) /index.php?rex_media_type=$1&rex_media_file=$2&$args;
rewrite ^/images/([^/]*)/([^/]*) /index.php?rex_media_type=$1&rex_media_file=$2&$args;
rewrite ^/imagetypes/([^/]*)/([^/]*) /index.php?rex_media_type=$1&rex_media_file=$2;
#!!! WICHTIG !!! Falls Let's Encrypt fehlschlägt, diese Zeile auskommentieren (sollte jedoch funktionieren)
location ~ /\. { deny all; }
# Zugriff auf diese Verzeichnisse verbieten
location ^~ /redaxo/src { deny all; }
location ^~ /redaxo/data { deny all; }
location ^~ /redaxo/cache { deny all; }
location ^~ /redaxo/bin { deny all; }
# In einigen Fällen könnte folgende Anweisung zusätlich sinnvoll sein.
location ~ /\.(ttf|eot|woff|woff2)$ {
add_header Access-Control-Allow-Origin *;
expires 604800s;
}
- In "YRewrite" unter "Domains" Auf das +-Zeichen klicken.
- Domain eintragen, bspw.
https://www.meine-domain.de/
. - Mountpoint auswählen (optional). Das ist der Startartikel einer Kategorie, in der sich YRewrite einklinken soll. Alle Artikel unterhalb des Mount-Artikels sind dann über die Domain aufrufbar. Wird kein Artikel ausgewählt, sind alle Ebenen dieser Domain zugeordnet (Standard).
- Startseiten-Artikel auswählen. Das kann der Mount-Artikel sein oder eine separate Artikelseite. Diese wird als Startseite der Domain aufgerufen.
- Fehlerseiten-Artikel auswählen. Das ist der Artikel, der mit einem 404-Fehlercode ausgegeben wird, z.B., wenn eine Seite nicht gefunden werden kann oder ein Tippfehler in der Adresse vorliegt.
- Spracheinstellungen: Hier können Sprachen ausgewählt werden, die mit der Domain verknüpft werden. So lassen sich bspw. unterschiedliche Domains pro Sprache umsetzen.
- Titelschema eintragen, bspw.
%T - Meine Domain
. Dieses Titelschema kann dann im Website-Template ausgegeben werden. - robots.txt-Einstellungen hinzufügen. Siehe Tipp unten.
- Domain hinzufügen.
Diese Vorgehensweise für alle gewünschten Domains wiederholen.
Tipp: Um die Installation während der Entwicklung zuverlässig gegen ein Crawling von Bots und Suchmaschinen zu schützen, genügt die
robots.txt
nicht. Dazu gibt es dasmaintanance
-Addon von https://friendsofREDAXO.github.io
Tipp: Die Domain auch in der Google Search Console hinterlegen und die
sitemap.xml
dort hinzufügen, um das Crawling zu beschleunigen. Die Domain sollte in allen vier Variationen hinterlegt werden, also mit/ohnehttps
und mit/ohnewww.
. Diesitemap.xml
jedoch nur in der Hauptdomain, am besten mithttps://
undwww.
Hinweis: Domains mit Umlauten bitte derzeit decodiert eintragen. Umwandlung bspw. mit https://www.punycoder.com
Alias-Domains werden nur dann benötigt, wenn mehrere Domains auf den selben Ordner im Server zeigen, aber keine separaten Websites aufrufen. z.B. www.meinedomain.de
und www.meine-domain.de
.
Alias-Domains müssen nicht eingetragen werden, wenn die Domain nicht auf das Serververzeichnis zeigt. Einige Hoster bieten bspw. von sich aus die Möglichkeit, per Redirect von www.meinedomain.de
auf www.meine-domain.de
weiterzuleiten. Dann wird die Einstellung nicht benötigt.
- In "YRewrite" unter "Domains" Auf das +-Zeichen klicken
- Alias-Domain eintragen, bspw.
https://www.meine-domain.de/
- Ziel-Domain aus YRewrite auswählen
- Alias-Domain hinzufügen
Unter Weiterleitungen können URLs definiert werden, die dann auf einen bestimmten Artikel oder eine andere Adresse umgeleitet werden.
Hinweis: Mit dieser Einstellung können nicht bereits vorhandene Artikel / URLs umgeleitet werden, sondern nur URLs, die in der REDAXO-Installation nicht vorhanden sind. Das ist bspw. bei einem Relaunch der Fall, wenn alte URLs auf eine neue Zielseite umgeleitet werden sollen.
Die sitemap.xml
kann pro Domain bspw. in der Google Search Console eingetragen werden, um die korrekte Indexierung der Domain(s) und deren Seiten zu überprüfen.
Siehe auch: https://github.com/yakamara/REDAXO_yrewrite/blob/master/lib/yrewrite.php
$yrewrite = new rex_yrewrite;
# dump($yrewrite); // optional alle Eigenschaften und Methoden anzeigen
Methoden
Siehe auch: https://github.com/yakamara/REDAXO_yrewrite/blob/master/lib/domain.php
$domain = rex_yrewrite::getCurrentDomain();
dump($domain); // optional alle Eigenschaften und Methoden anzeigen
Methoden
init()
getScheme()
setScheme(rex_yrewrite_scheme $scheme)
addDomain(rex_yrewrite_domain $domain)
addAliasDomain($from_domain, $to_domain_id, $clang_start = 0)
getDomains()
getDomainByName($name)
getDomainById($id)
getDefaultDomain()
getCurrentDomain()
getFullUrlByArticleId($id, $clang = null, array $parameters = [], $separator = \'&\')
getDomainByArticleId($aid, $clang = null)
getArticleIdByUrl($domain, $url)
isDomainStartArticle($aid, $clang = null)
isDomainMountpoint($aid, $clang = null)
getPathsByDomain($domain)
prepare()
rewrite($params = [], $yparams = [], $fullpath = false)
generatePathFile($params)
checkUrl($url)
generateConfig()
readConfig()
readPathFile()
copyHtaccess()
isHttps()
deleteCache()
getFullPath($link = \'\')
getHost()
Siehe auch: https://github.com/yakamara/REDAXO_yrewrite/blob/master/lib/seo.php
$seo = new rex_yrewrite_seo();
dump($seo); // optional alle Eigenschaften und Methoden anzeigen
Methoden
rex_yrewrite::getCurrentDomain()->getId();
Beispiel-Rückgabewert: 1
rex_yrewrite::getCurrentDomain()->getMountId();
Beispiel-Rückgabewert: 5
rex_yrewrite::getCurrentDomain()->getStartId();
Beispiel-Rückgabewert: 42
rex_yrewrite::getCurrentDomain()->getNotfoundId();
Beispiel-Rückgabewert: 43
rex_yrewrite::getCurrentDomain()->getName();
Beispiel-Rückgabewert: meine-domain.de
rex_yrewrite::getFullUrlByArticleId(42);
Beispiel-Rückgabewert: https://www.meine-domain.de/meine-kategorie/mein-artikel.html
rex_yrewrite::getDomainByArticleId(REX_ARTICLE_ID)->getName();
Beispiel-Rückgabewert: meine-domain.de
Diesen Codeabschnitt in den <head>
-Bereich des Templates kopieren:
$seo = new rex_yrewrite_seo();
echo $seo->getTitleTag();
echo $seo->getDescriptionTag();
echo $seo->getRobotsTag();
echo $seo->getHreflangTags();
echo $seo->getCanonicalUrlTag();
Weitere Informaionen zur Navigation Factory des REDAXO-Cores in der API-Dokumentation unter https://REDAXO.org/api/master/ und bei den Tricks von FriendsOfREDAXO: https://github.com/friendsofREDAXO/tricks/
$nav = rex_navigation::factory();
echo $nav->get(rex_yrewrite::getCurrentDomain()->getMountId(), 1, TRUE, TRUE);
$domains = array_filter(rex_sql::factory()->setDebug(0)->query(\'SELECT * FROM rex_yrewrite_domain\')
foreach($domains as $domain) {
dump($domain);
}
YRewrite kann durch Schemes erweitert werden.
Installation
- Als Datei im
lib
-Ordner des project-AddOns ablegen. - Dateiname:
eigene_rewrite_class.php
- In die
boot.php
des project-AddOns einsetzen:
<?php
if (rex_addon::get(\'yrewrite\')->isAvailable()) {
rex_yrewrite::setScheme(new eigene_rewrite_class());
}
Nachfolgend listen wir hier ein paar Beispiele.
<?php
class rex_yrewrite_scheme_mysuffix extends rex_yrewrite_scheme
{
protected $suffix = \'.html\';
}
<?php
class rex_yrewrite_scheme_mysuffix extends rex_yrewrite_scheme
{
protected $suffix = Null;
}
Ersetzt URLs leerer Elternkategorien mit den URLs der nächsten mit inhalt versehenen (online-)Kindkategorie.
Basiert auf: https://gist.github.com/gharlan/a70704b1c309cb1281c1
<?php
class rex_yrewrite_scheme_gh extends rex_yrewrite_scheme
{
protected $suffix = \'/\';
public function getRedirection(rex_article $art, rex_yrewrite_domain $domain)
{
if ($art->isStartArticle() && ($cats = $art->getCategory()->getChildren(true))) {
return $cats[0];
}
return false;
}
}
<?php
class rex_yrewrite_scheme_gh extends rex_yrewrite_scheme
{
protected $suffix = \'/\';
public function getRedirection(rex_article $art, rex_yrewrite_domain $domain)
{
if ($art->isStartArticle() && ($cats = $art->getCategory()->getChildren(true)) && !rex_article_slice::getFirstSliceForCtype(1, $art->getId(), rex_clang::getCurrentId())) {
return $cats[0];
}
return false;
}
}
So kann als Kategoriename ein Platzhalter wie {{contact}} verwendet werden und durch die in Sprog hinterlegten Sprachvarianten ersetzt werden.
One Level, Kategoriename-Ersetzung durch Sprog.
<?php
class translate_url_with_sprog extends rex_yrewrite_scheme
{
public function appendCategory($path, rex_category $cat, rex_yrewrite_domain $domain)
{
return $path;
}
public function appendArticle($path, rex_article $art, rex_yrewrite_domain $domain)
{
return $path . \'/\' . $this->normalize(sprogdown($art->getName(), $art->getClangId()), $art->getClangId()) . \'/\';
}
}
Multilevel, Kategoriename-Ersetzung durch Sprog.
<?php
class translate_url_with_sprog extends rex_yrewrite_scheme
{
public function appendCategory($path, rex_category $cat, rex_yrewrite_domain $domain)
{
return $path . \'/\' . $this->normalize(sprogdown($cat->getName(), $cat->getClangId()), $cat->getClangId());
}
}
Die Ersetzungsmuster können mit eigenen Schema verändert werden. In diesem Beispiel wird &
durch und
getauscht.
- Datei in den lib-Ordner des Project-AddOns anlegen
<?php
class rex_project_rewrite_scheme extends rex_yrewrite_scheme
{
/**
* @param string $string
* @param int $clang
*
* @return string
*/
public function normalize($string, $clang = 1)
{
$string = str_replace(
['&'],
['und'],
$string
);
// Id 2 = ungarisch
if ($clang == 2) {
$string = str_replace(
['ő', 'ű'],
['oe', 'ue'],
$string
);
}
return parent::normalize($string, $clang);
}
}
- In der
boot.php
-Datei desproject
-AddOns diesen Code einfügen:
rex_yrewrite::setScheme(new rex_project_rewrite_scheme());
- Bug melden via GitHub: https://github.com/yakamara/REDAXO_yrewrite/issues/
- Hilfe via REDAXO Slack-Channel: https://friendsofREDAXO.slack.com/
- Tricks via FriendsOfREDAXO: https://friendsofredaxo.github.io/tricks/ bei Addons > YRewrite