Hardcore RealURL: Mehrere Domains, PreVars, Sprachen, Rootpages, Decode/Encode

RealURL ist eine echte Bereicherung für TYPO3. Allerdings kommt man immer wieder an den Punkt, wo man denkt, daran haben die Entwickler nicht gedacht bzw. das ist nicht mit RealURL möglich. Dieser Artikel bezieht sich auf ein TYPO3 System welches mal wieder sehr „speziell“ konfiguriert werden musste.

Das System besteht aus zwei Pagetrees. Beide Seiten in diesem System sind mehrsprachig und sollen unterschiedlich mit den Sprachen umgehen. In etwa so soll es aussehen:

– Seite1 (www.seite1.de; englische Variante mit PreVar /en/)
| – Unterseiten…
| – Unterseiten…
| – Unterseiten…
– Seite 2 (www.seite2.de; englische Variante www.seite2.com und polnische Variante als Prevar www.seite2.com/pl/)

Seite1 lässt sich hierbei noch relativ leicht mit einer entsprechenden Prevar konfigurieren, wichtig ist nur, dass die Einstellungen in der realurl_conf.php nur Auswirkungen auf den Seitenbaum von Seite2 haben.

Auf Seite2 wollen wir natürlich, dass das Sprachmenü automatisch auf die Domain der jeweiligen Sprache verweist sprich .de auf .com oder .com/pl/ und umgekehrt.

Zunächst einmal definieren wir die PreVars in der _DEFAULT RealURL Konfiguration. Hier ersetzen wir – je nach L Parameter – die PreVars /en/, /pl/ und /de/. „no_cache“ wird in diesem Beispiel auch zur Prevar /nc/. Die komplette RealURL Konfiguration könnt ihr euch übrigens hier herunterladen.

        'preVars' => array (
            '0' => array (
                'GETvar' => 'no_cache',
                'valueMap' => array (
                    'nc' => '1',
                ),
                'noMatch' => 'bypass'
            ),
            '1' => array (
                'GETvar' => 'L',
                'valueMap' => array (
                    'de' => '0',
                    'en' => '1',
                    'pl' => '2',
                ),
                'noMatch' => 'bypass',
            ),
        ),

Ein bisschen weiter unten in der Config weisen wir den einzelnen Seiten die _DEFAULT Konfiguration zu und stellen jeweils unterschiedliche rootpage_id’s ein. Außerdem aktivieren wir das DomainLookup.

$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT']['enableDomainLookup'] = 1;

// Seite 1
$TYPO3_CONF_VARS['EXTCONF']['realurl']['www.seite1.de'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
$TYPO3_CONF_VARS['EXTCONF']['realurl']['www.seite1.de']['pagePath']['rootpage_id'] = 1;

// Seite 2
$TYPO3_CONF_VARS['EXTCONF']['realurl']['www.seite2.de'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
$TYPO3_CONF_VARS['EXTCONF']['realurl']['www.seite2.de']['pagePath']['rootpage_id'] = 139;

// Seite 3
$TYPO3_CONF_VARS['EXTCONF']['realurl']['www.seite2.com'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
$TYPO3_CONF_VARS['EXTCONF']['realurl']['www.seite2.com']['pagePath']['rootpage_id'] = 139;

// Seite 4 (virtuell)
$TYPO3_CONF_VARS['EXTCONF']['realurl']['www.seite2.pl'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
$TYPO3_CONF_VARS['EXTCONF']['realurl']['www.seite2.pl']['pagePath']['rootpage_id'] = 139;

Bitte beachtet: In unserem Fall gibt es nun bewusst auch eine www.seite2.pl Konfiguration obwohl wir diese Domain selbst gar nicht besitzen. Wir brauchen diese für für das Decoding und Encoding.

Und nun wird es auch interessant, denn jetzt folgt das Decode und Encode von Realurl. Die offizielle Beschreibung dieser Konfiguration ist relativ „mau“. Mit der Encode-Funktion lässt sich die URL im Sprachmenü – je nach L-Parameter – entsprechend verändern. Mit der Decode-Konfiguration lassen sich automatisch – je nach Domain – die GET Parameter überschreiben.

Bedauerlicherweise fehlt der Encode-„Funktion“ die Möglichkeit nach Domains zu unterscheiden, weswegen wir auf dem klassischen Wege erstmal die Domain abfragen müssen. Wir wollen ja nur auf Seite2.de, dass auf Seite2.com umgeschaltet wird, aber auf Seite1.de soll der englischen Variante die Prevar /en/ vorangestellt werden. Daher brauchen wir nur für Seite.xx ein Encode bzw. Decode.

if(preg_match('/(www\.)?seite2\.com/', $_SERVER['HTTP_HOST']) > 0 || preg_match('/(www\.)?seite2\.de/', $_SERVER['HTTP_HOST']) > 0){
    $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DOMAINS'] = array(
         'encode' => array(
             array(
                 'GETvar' => 'L',
                 'value' => '0',
                 'useConfiguration' => 'www.seite2.de',
                 'urlPrepend' => 'http://www.seite2.de', 
             ),
             array(
                 'GETvar' => 'L',
                 'value' => '1',
                 'useConfiguration' => 'www.seite2.com',
                 'urlPrepend' => 'http://www.seite2.com', 
             ),
             array(
                 'GETvar' => 'L',
                 'value' => '2',
                 'useConfiguration' => 'www.seite2.pl',
                 'urlPrepend' => 'http://www.seite2.com/pl/', 
             ),
         ),
         'decode' => array( 
            'www.seite2.de' => array( 
                'GETvars' => array( 
                    'L' => '0',
                ), 
                'useConfiguration' => 'www.seite2.de', 
            ), 
            'www.seite2.com' => array( 
                'GETvars' => array( 
                    'L' => '1',
                ), 
                'useConfiguration' => 'www.seite2.com', 
            ), 
            'www.seite2.pl' => array( 
                'GETvars' => array( 
                    'L' => '2',
                ), 
                'useConfiguration' => 'www.seite2.pl', 
            ),
        ),
    );
}

Das Decode und Encode für die „virtuelle“ .pl Domain sorgt nun (siehe Zeile 20) dafür, dass sich die polnische Version innerhalb der .com Domain befindet und auch im Sprachmenü die richtigen URLs verwendet werden.

Ohne diese Einstellungen ist es relativ kompliziert ein richtiges Sprachmenü zu basteln, welches zwischen verschiedenen Domains umschaltet. Vieles könnte man sich sparen, wenn es auch für die die polnische Version eine richtige Domain geben würde oder alle Sprachen Ihren eigenen Seitenbaum im Backend haben würden.

Falls ihr Fragen habt, postet diese einfach in die Kommentare. Die komplette realurl_conf.php könnt ihr euch hier herunterladen.

4 Kommentare

  • Riesen Dank! Das war wirklich sehr hilfreich.

  • Funktioniert wunderbar! Vielen Dank 😉

  • Funktioniert leider nicht mehr mit Realurl 2.x 🙁

  • Mit RealUrl 2.2 gibt es die Möglichkeit in der „encode“-Sektion als zusätzlichen Konfigurationsparameter die Rootpage anzugeben (rootpage_id = xy). Damit dürfte die Konfiguration insgesamt einfacher werden.
    Die zusätzliche Abfrage von $_SERVER[‚HTTP_HOST‘] ist damit überflüssig und es können ohne Probleme mehrere Domains mit einer Sprache (sys_language_uid) aber unterschiedlichen Seitenbäumen (Rootpages) genutzt werden. DANKE

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.