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. 😉

Schreibe einen Kommentar

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.