Moin!
Ich würd' hier gerne mal was zur Diskussion stellen:
Wenn man mit RealURL eine mehrsprachige Site aufbauen will, steht man irgendwann vor ein paar Problemen.
Je nach Konfiguration ist der Inhalt der Standardsprache sowohl über die URL mit Sprachkürzel als auch ohne erhältlich, also sowohl über
als auch über
http://www.bla.com/en/blubb.html
Das macht Suchmaschinen natürlich nicht froh, weil es Content doppelt gibt.
Die Variante, für die Standardsprache nur die Adresse ohne Sprachkürzel anzubieten, ist ziemlich inkonsistent.
Dem kann man Abhilfe schaffen, indem man einen Standardwert definiert und keinen Bypass zuläßt:
'preVars' => array(
array(
'GETvar' => 'L',
'valueMap' => array(
'en' => '0',
'de' => '1',
'fr' => '2',
'nl' => '3',
),
'valueDefault' => 'en',
),
),
Im Hinblick auf die Behandlung von Aufrufen nicht vorhandener Seiten gibt's nun aber ein Problem:
Gibt man eine Adresse ohne Sprachkürzel ein, wird sie auf eine mit dem Standardkürzel "en" umgeschrieben. Wenn es die Seite gibt, ist das in Ordnung.
Gibt es sie jedoch nicht, wird unabhängig von den Einstellungen für pageNotFoundHandling im Install-Tool und der Einstellung postVarSet_failureMode keine Fehlerseite aufgerufen und - noch schlimmer - es wird kein 404 Not Found im Header zurückgegeben. Im Hinblick auf Suchmaschinen ist das tödlich, weil doppelter Content auftaucht und alte Seiten nicht aus deren Datenbank gelöscht werden.
Nach viel Herumprobieren ist mir folgende Umgehungslösung eingefallen:
Es wird einfach alles, was ohne Sprachkürzel eingegeben wird, direkt auf das Sprachkürzel der Standardsprache umgeleitet. Damit greift dieser Mechanismus auch für nicht vorhandene Adressen und es wird wieder eine Fehlerseite angezeigt.
Das geht so:
'redirects_regex' => array(
'(^..[^/].*)' => 'en/\1'
),
Im Klartext wird allen Adressen, die keinen Slash enthalten, der String "en/" vorangestellt.
Dann läßt sich auch noch die Fehlerseite für die jeweilige Sprache anpassen. Klar, bei Adressen ohne anfängliches Sprachkürzel kennt man die Sprache nicht, aber wenn jemand z.B. im deutschen Bereich eine nicht vorhandene Adresse aufruft, sollte er schon eine deutsche Fehlermeldung bekommen. Das kann man folgendermaßen tun:
Im Install-Tool unter pageNotFoundHandling eintragen:
USER_FUNCTION:fileadmin/scripts/pageNotFoundHandling.php:user_pageNotFound->pageNotFound
pageNotFoundHandling.php sieht so aus:
<?php
class user_pagenotfound {
function pagenotfound($param, $conf) {
$host = $_SERVER['SERVER_NAME'];
$lang = substr($param['currentUrl'], 1, 2);
$errorpage = "404.html";
header("HTTP/1.0 404 Not Found");
header("Location: http://".$host."/".$lang."/".$errorpage);
}
}
?>
Auf der obersten Ebene des TYPO3-Seitenbaums legt man dann eine Seite mit dem Titel 404 an und kann sie auch übersetzen.
Nun würde mich mal interessieren, ob es dafür eine bessere Lösung gibt. Irgendwelche Tips?