Seit der Version 9.5 bietet TYPO3 mit dem Site Handling eine wesentlich aufgeräumtere Möglichkeit, Domains, Einstiegspunkte und Sprachen zu verwalten als es bis zur V8.7 der Fall war.
Leider bleibt aber ein Aspekt auf der Strecke: Bis zur V8.7 konnte man einem Seitenbaum prinzipiell beliebig viele Domains auf einen Seitenbaum mappen - das geht mit der config.yaml des Site Handlings nun nicht mehr ohne weiteres.
Zwar ist es möglich, mehrere BaseVariants zu hinterlegen, aber diese beziehen sich meist auf einen ApplicationContext, d.h. in der Regel wird hier für einen anderen Server oder VHost eine passende Domain hinterlegt:
baseVariants:
-
base: 'https://de.example.localhost/'
condition: 'applicationContext == "Development/Testing"'
-
base: 'https://www.example.de/'
condition: 'applicationContext == "Production/Live"'
Wir hatten eine Kundenanfrage für einen Fallback-Server der Produktivumgebung, der in einem separaten Rechenzentrum steht, periodisch synchronisiert wird und im Desasterfall einspringen soll, indem die DNS-Einträge auf ihn umgestellt werden. Der Server ist ein zeitversetzter 1:1-Klon der Live-Webseite.
Kundenanforderung war zusätzlich, dass die in dem TYPO3 hinterlegten Seitenbäume neben der Live-Domain (www) auch über eine Fallback-Domain erreichbar sein sollen. Die jeweiligen Root-Seiten müssen also nicht nur auf www.domain.de, sondern im gleichen ApplicationContext auch auf fallback.domain.de reagieren.
Die Lösung ist eigentlich relativ einfach, wenn man sie einmal kennt. Hierzu muss man wissen, dass die config.yaml über die Funktion getenv() auch Environment-Variablen von php auslesen kann. Über den Trick, statt des ApplicationContext den Wert von
$_SERVER['HTTP_HOST']abzufragen, ist die Anforderung zu erfüllen:
baseVariants:
- base: 'https://development.example.de/'
condition: applicationContext == "Development/Testing"
- base: 'https://staging.example.de/'
condition: applicationContext == "Production/Staging"
- base: 'https://fallback.example.de/'
condition: 'getenv("HTTP_HOST") == "fallback.example.de"'
- base: 'https://www.example.de/'
condition: applicationContext == "Production/Live"
Wichtig: die Reihenfolge ist entscheidend! In dem Fall soll fallback.example.de auch auf Production/Live funktionieren. Weil der geklonte Server sich auch für den Produktiv-Server hält, also auf "Production/Live" als ApplicationContext reagieren würde, muss die Abfrage mit getenv() auf jeden Fall VOR dem jeweiligen Context stehen. Der erste Fall, der passt, wird vom System übernommen.
Im Ergebnis ist Production/Live nicht nur unter www.example.de, sondern auch unter fallback.example.de erreichbar und TYPO3 liefert in beiden Fällen den gleichen Seitenbaum aus.
Marcus am February 6th at 10:11pm