TYPO3: Multidomain Konfiguration

Beruflich habe ich viel mit den Webseiten der Universitäten im Land MV zu tun. Es ist kein Geheimnis, dass alle zentralen Webseiten in Greifswald gehostet werden und TYPO3 als CMS verwendet wird.

Eine TYPO3-Instanz (Installation) versorgt hunderte (Sub-)Domains und liefert zigtausend Seiten aus, die von vielen Redakteuren bespielt werden. Dabei ist es nur normal, dass für die jeweiligen Einrichtungen individuelle Konfigurationen notwendig sind. Beispiele hierfür sind Log-Daten oder E-Mail-Einstellungen.

Das haben wir ganz clever gemacht: Die aufgerufene Domain wird ausgelesen und je nach Fall werden die Konfigurationen angepasst.

Dreh- und Angelpunkt ist die AdditionalConfiguration.php, die bei jedem Aufruf der Seite durchgearbeitet wird. Dort werden die Anpassungen an den Einstellungen vorgenommen.

1. Welche Domain wird aufgerufen

Eine zentrale Funktion zum auslesen der aufgerufenen Domain kann z.B. so aussehen:

function getDomain($host) {
    preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
    return strtolower($matches[0]);
}

2. Einstellungen individuell setzen

Jetzt müssen die möglichen Fälle unterschieden werden. Dazu wird die aufgerufene Domain mit der o.g. Funktion "vereinfacht" und die gewünschten Parameter in der Konfiguration angepasst:

$domain = getDomain($_SERVER['HTTP_HOST']);
switch ($domain) {
    case 'uni-greifswald.de':
        $GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress'] = 'webmaster@uni-greifswald.de';
        $errorLogFileName = 'error_greifswald';
    break;

    case 'uni-rostock.de':
        // weitere Anpassungen möglich
    break;
    // ... und so weiter ...
}

Nachdem die Anpassungen vorgenommen wurden, kann so eine individualisierte Log-Datei für Fehler (Error) mit einem Log Writer geschrieben werden.

$GLOBALS['TYPO3_CONF_VARS']['LOG']['writerConfiguration'] = [    
    \TYPO3\CMS\Core\Log\LogLevel::ERROR => [
        \TYPO3\CMS\Core\Log\Writer\FileWriter::class => [
            'logFile' => '/var/log/' .$errorLogFileName. '.log'
        ]
    ]
];

Im Beispiel werden so alle Fehler, die beim Aufrufen einer Seite mit der Domain uni-greifswald.de auftreten, in die Datei /var/log/error_greifswald.log geschrieben.

Stolpersteine

Sollten auf diesem oder anderen Wegen Unterschlüssel von $GLOBALS['TYPO3_CONF_VARS'] überschrieben werden, ist darauf zu achten, dass diese Informationen nicht an anderer Stelle dringen benötigt werden!

So kann es vielleicht sein, dass $GLOBALS['TYPO3_CONF_VARS']['MAIL'] komplett überschrieben wird und die notwendigen Angaben zum Fluid-Template (layoutRootPaths, partialRootPaths und templateRootPaths) verschütt gehen. Das bereitet dann Sorge, wenn das TYPO3 versucht System-Mails zu verschicken.

Eine Fehlermeldung, wenn beim Login eine E-Mail geschickt werden soll, ist dann:

Core: Exception handler (WEB): Uncaught TYPO3 Exception: #1257246929: Tried resolving a template file for controller action "Standard->security/LoginNotification" in format ".html", but none of the paths contained the expected template file (Standard/Security/LoginNotification.html). No paths configured.

Hier können die fehlenden Parameter leicht im Nachgang wieder gesetzt werden. Abschreiben kann man diese aus der typo3/sysext/core/Configuration/DefaultConfiguration.php ().