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 die .htaccess
-Datei von REDAXO aktualisiert. Auch eine virtuelle robots.txt
und sitemap.xml
werden erstellt.
- 302 Redirects sind nun möglich
- automatische 301 Redirects eingebaut
Anschließend können ein oder mehrere Domains zu YRewrite hinzugefügt werden.
- In "YRewrite" unter "Domains" Auf das +-Zeichen klicken.
- Domain eintragen, bspw.
https://www.meine-domain.de/
. - Mount-Artikel auswählen. Das ist der der Startartikel einer Kategorie, in der sich YRewrite einklinken soll. Alle Artikel unterhalb des Mount-Artikels sind dann über die Domain aufrufbar.
- 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.
Unter Setup
kann die .htaccess
-Datei neu überschrieben werden, die für die Verwendung von YRewrite benötigt wird. Außerdem sind die sitemap.xml
und robots.txt
je Domain einsehbar.
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->getClang()), $art->getClang()) . \'/\';
}
}
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->getClang()), $cat->getClang());
}
}
- YRewrite scheme: https://github.com/FriendsOfREDAXO/yrewrite_scheme
- xcore: https://github.com/RexDude/xcore
- Auf Github: https://github.com/yakamara/REDAXO_yrewrite/issues/
- im Forum: https://www.REDAXO.org/forum/
- im Slack-Channel: https://friendsofREDAXO.slack.com/