realurl_conf.php für multidomain multilanguage multiwebsite multienvironment Accounts

Dieses Snippet erleichtert die RealURL-Konfiguration für komplexe TYPO3-Systeme erheblich. Durch die Funktion setRealUrlConf wird das KonfigurationsArray sehr kurz und übersichtlich gehalten.

<?php
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
	'enableDomainLookup' => 1,
	'init' => array(
		'enableCHashCache' => 1,
		'enableUrlDecodeCache' => 1,
		'enableUrlEncodeCache' => 1,
	),
	'rewrite' => array(),
	'preVars' => array(),
	'pagePath' => array(
		'type' => 'user',
		'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
		'spaceCharacter' => '-',
		'languageGetVar' => 'L',
		'expireDays' => 30,
	),
	'fileName' => array (
		'defaultToHTMLsuffixOnPrev' => 1,
		'index' => array(
			'page.html' => array(
				'keyValues' => array (
					'type' => 1,
				),
			),
		),
	),
	'fixedPostVarSets' => array(),
	'postVarSets' => array(),
);

function setRealUrlConf($domainArray, $rootpage_id, $errorPageUid) {
	if(array_key_exists($_SERVER['HTTP_HOST'], $domainArray)) {
		global $TYPO3_CONF_VARS;

		foreach($domainArray as $domain => $lang) {
			$TYPO3_CONF_VARS['EXTCONF']['realurl'][$domain] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
			$TYPO3_CONF_VARS['EXTCONF']['realurl'][$domain]['pagePath']['rootpage_id'] = $rootpage_id;
			$TYPO3_CONF_VARS['EXTCONF']['realurl'][$domain]['errorPage'] = $errorPageUid;

			$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DOMAINS']['encode'][$domain] = array(
	   	        'GETvar' => 'L',
	   	        'value' => $lang,
	   	        'useConfiguration' => $domain,
	   	        'urlPrepend' => 'http://'.$domain, 
	    	);
		    $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DOMAINS']['decode'][$domain] = array(
	   			'GETvars' => array(
	   				'L' => $lang,
	   			), 
	   			'useConfiguration' => $domain, 
			);
		}
		return true;
	}
}

$domains = array();
$error_pages = array();
# $domains[@rootpage_id][@environment:dev|stage|prod][@domain] = @lang;

# Webseite 1
#############
$error_pages[1] = 10;
$domains[1]['prod']['www.webseite1.de'] = 0;
$domains[1]['prod']['www.webseite1.en'] = 1;
$domains[1]['prod']['www.webseite1.fr'] = 2;
$domains[1]['prod']['www.webseite1.nl'] = 3;
$domains[1]['prod']['www.webseite1.pl'] = 4;
$domains[1]['dev']['dev.webseite1.de'] = 0;
$domains[1]['dev']['dev.webseite1.en'] = 1;
$domains[1]['dev']['dev.webseite1.fr'] = 2;
$domains[1]['dev']['dev.webseite1.nl'] = 3;
$domains[1]['dev']['dev.webseite1.pl'] = 4;
$domains[1]['stage']['stage.webseite1.de'] = 0;
$domains[1]['stage']['stage.webseite1.en'] = 1;
$domains[1]['stage']['stage.webseite1.fr'] = 2;
$domains[1]['stage']['stage.webseite1.nl'] = 3;
$domains[1]['stage']['stage.webseite1.pl'] = 4;

# Webseite 2
#############
$error_pages[2] = 20;
$domains[2]['prod']['www.webseite2.de'] = 0;
$domains[2]['prod']['www.webseite2.en'] = 1;
$domains[2]['prod']['www.webseite2.fr'] = 2;
$domains[2]['dev']['dev.webseite2.de'] = 0;
$domains[2]['dev']['dev.webseite2.en'] = 1;
$domains[2]['dev']['dev.webseite2.fr'] = 2;
$domains[2]['stage']['stage.webseite2.de'] = 0;
$domains[2]['stage']['stage.webseite2.en'] = 1;
$domains[2]['stage']['stage.webseite2.fr'] = 2;

# Erzeugen des KonfigurationsArrays
foreach($domains as $rootpage_id => $website) {
	foreach($website as $environment => $used_domains) {
		if(setRealUrlConf($used_domains, $rootpage_id, $error_pages[$rootpage_id])) break;
	}
}
?>

404-Seiten optional

Das Array error_pages ist nicht nötig aber im Zusammenhang mit diesem Artikel ganz hilfreich.

(Entwicklungs-)Umgebungen

Natürlich braucht man auch keine unterschiedlichen (Entwicklungs-)Umgebungen aber das zweite Segment im domains-Array wird trotzdem gebraucht – welcher Schlüssel dort verwendet wird ist egal.

$domains[@rootpage_id]['irgendwas'][@domain] = @lang;

Das encode-Array – eine Schwachstelle von RealURL

Die Bedingung in Zeile 33 ist notwendig weil das encode-Array ($TYPO3_CONF_VARS[‚EXTCONF‘][‚realurl‘][‚_DOMAINS‘][‚encode‘]) nicht funktioniert wenn dort mehrere Elemente mit der gleichen SprachID enthalten sind.

Zur Performance

Diese RealURL-Konfiguration ist tatsächlich schön übersichtlich. Übersichtlichkeit geht mit Sicherheit auf Kosten der Performance, deshalb überlege ich eine kleine Extension zu bauen, die dann eine statische Konfigurationsdatei erzeugt.
Das mache ich wenn mal wieder ein bisschen mehr Zeit ist – also wahrscheinlich im nächsten Leben. 😉

Ein Kommentar

  • Die in Zeile 33 genannte Lösung hat den Nachteil, dass Links zwischen den verschiedenen Seiten nicht funktionieren. Aktuelle RealURL-Versionen (ev. auch ältere, aber im Code von RealURL 2 zu finden) haben für die Encode-Configuration einen Parameter „rootpage_id“. Wenn dieser gesetzt ist, kann das if in Zeile 33 wegfallen und alles funktioniert – inklusive der Verlinkung untereinander.

Schreibe einen Kommentar zu Lorenz Ulrich Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Highlighting von Codes ist mit den Tags  [ts], [php], [html], [javascript], [xml] oder [code] möglich.