/
. Dies sorgt für Root-relative Pfade.config { absRefPrefix = / prefixLocalAnchors = all simulateStaticDocuments = 0 tx_realurl_enable = 1 }
Das früher gesetzte <base href=„#“ />
Element im Head-Bereich ist heute nicht mehr zeitgemäß.
Die Datei wird in den Ordner typo3conf/
gelegt. Das Multidomain-Setup stammt von Wolfgang Wagner, die gewünschten Domains können oben gesetzt werden. Bei Verwendung mit news müssen die Seiten-UIDs für Einzelansicht(en) und ggf. Kategorien und Tags angepasst werden.
<?php $GLOBALS['TYPO3_CONF_VARS']['FE']['addRootLineFields'] .= ',tx_realurl_pathsegment'; // Domain 1: $domain1 = 'www.beispiel.de'; $rootPageUid1 = 1; // Domain 2: $domain2 = 'www.example.org'; $rootPageUid2 = 128; // Domain 3: $domain3 = 'www.example.com'; $rootPageUid3 = 256; $rssFeedPageType = 9818; // pageType of your RSS feed page (f.e. EXT:news) $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain1] = [ 'pagePath' => [ 'spaceCharacter' => '-', 'languageGetVar' => 'L', 'expireDays' => '7', 'rootpage_id' => $rootPageUid1, 'autoUpdatePathCache' => '1', ], 'init' => [ 'enableCHashCache' => 1, 'appendMissingSlash' => 'ifNotFile', 'enableUrlDecodeCache' => 1, 'enableUrlEncodeCache' => 1, ], 'fileName' => [ 'defaultToHTMLsuffixOnPrev' => 1, 'acceptHTMLsuffix' => 1, 'index' => [ 'feed.rss' => [ 'keyValues' => [ 'type' => $rssFeedPageType, ] ], 'sitemap.xml' => [ 'keyValues' => [ 'type' => 841132, ], ], ] ], 'preVars' => [ [ 'GETvar' => 'L', // IDs of all languages and the wanted url part 'valueMap' => [ // 'de' => '0', 'en' => '1', ], 'noMatch' => 'bypass', ], [ 'GETvar' => 'no_cache', 'valueMap' => [ 'nc' => 1, ], 'noMatch' => 'bypass', ], ], 'fixedPostVars' => [ 'newsDetailConfiguration' => [ [ 'GETvar' => 'tx_news_pi1[action]', 'valueMap' => [ // 'detail' => '', ], 'noMatch' => 'bypass' ], [ 'GETvar' => 'tx_news_pi1[controller]', 'valueMap' => [ // 'News' => '', ], 'noMatch' => 'bypass' ], [ 'GETvar' => 'tx_news_pi1[news]', 'lookUpTable' => [ 'table' => 'tx_news_domain_model_news', 'id_field' => 'uid', 'alias_field' => 'title', 'addWhereClause' => ' AND NOT deleted', 'useUniqueCache' => 1, 'useUniqueCache_conf' => [ 'strtolower' => 1, 'spaceCharacter' => '-' ], 'languageGetVar' => 'L', 'languageExceptionUids' => '', 'languageField' => 'sys_language_uid', 'transOrigPointerField' => 'l10n_parent', 'autoUpdate' => 1, 'expireDays' => 180, ] ] ], 'newsCategoryConfiguration' => [ [ 'GETvar' => 'tx_news_pi1[overwriteDemand][categories]', 'lookUpTable' => [ 'table' => 'sys_category', 'id_field' => 'uid', 'alias_field' => 'title', 'addWhereClause' => ' AND NOT deleted', 'useUniqueCache' => 1, 'useUniqueCache_conf' => [ 'strtolower' => 1, 'spaceCharacter' => '-' ] ] ] ], 'newsTagConfiguration' => [ [ 'GETvar' => 'tx_news_pi1[overwriteDemand][tags]', 'lookUpTable' => [ 'table' => 'tx_news_domain_model_tag', 'id_field' => 'uid', 'alias_field' => 'title', 'addWhereClause' => ' AND NOT deleted', 'useUniqueCache' => 1, 'useUniqueCache_conf' => [ 'strtolower' => 1, 'spaceCharacter' => '-' ] ] ] ], '17' => 'newsDetailConfiguration', // '18' => 'newsDetailConfiguration', // For additional detail pages, add their uid as well // '21' => 'newsTagConfiguration', // '4' => 'newsCategoryConfiguration', ], 'postVarSets' => [ '_DEFAULT' => [ // EXT:news 'controller' => [ [ 'GETvar' => 'tx_news_pi1[action]', 'noMatch' => 'bypass' ], [ 'GETvar' => 'tx_news_pi1[controller]', 'noMatch' => 'bypass' ] ], 'dateFilter' => [ [ 'GETvar' => 'tx_news_pi1[overwriteDemand][year]', ], [ 'GETvar' => 'tx_news_pi1[overwriteDemand][month]', ], ], 'page' => [ [ 'GETvar' => 'tx_news_pi1[@widget_0][currentPage]', ], ], ], // configure filenames for different pagetypes // 'fileName' => [ // 'defaultToHTMLsuffixOnPrev' => 1, // 'acceptHTMLsuffix' => 1, // 'index' => [ // 'print.html' => [ // 'keyValues' => [ // 'type' => 98, // ], // ], // 'rss.xml' => [ // 'keyValues' => [ // 'type' => 100, // ], // ], // 'rss091.xml' => [ // 'keyValues' => [ // 'type' => 101, // ], // ], // 'rdf.xml' => [ // 'keyValues' => [ // 'type' => 102, // ], // ], // 'atom.xml' => [ // 'keyValues' => [ // 'type' => 103, // ], // ], // ], // ], ], ]; // Domain 2: $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain2] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain1]; $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain2]['pagePath']['rootpage_id'] = $rootPageUid2; //$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain2]['fixedPostVars']['129'] = 'newsDetailConfiguration'; // Domain 3: $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain3] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain1]; $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain3]['pagePath']['rootpage_id'] = $rootPageUid3; //$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain3]['fixedPostVars']['257'] = 'newsDetailConfiguration'; // Local web dev environment: $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['client-1.test'] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain1]; $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['client-2.test'] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain2]; $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['client-3.test'] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain3];
Verwendet einfach die .htaccess, die im TYPO3-Core mitgeliefert wird. Diese enthält alle nötigen Konfigurationen.
realurl_conf.php (Auszug):
'postVarSets' => [ '_DEFAULT' => [ // tt_news archive parameters: 'archive' => [ [ 'GETvar' => 'tx_ttnews[year]', ], [ 'GETvar' => 'tx_ttnews[month]', 'valueMap' => [ 'january' => '01', 'february' => '02', 'march' => '03', 'april' => '04', 'may' => '05', 'june' => '06', 'july' => '07', 'august' => '08', 'september' => '09', 'october' => '10', 'november' => '11', 'december' => '12', ] ], ], // tt_news pagebrowser: 'browse' => [ [ 'GETvar' => 'tx_ttnews[pointer]', ], ], // tt_news categories: 'select_category' => [ [ 'GETvar' => 'tx_ttnews[cat]', ], ], // tt_news articles and searchwords: 'article' => [ [ 'GETvar' => 'tx_ttnews[tt_news]', 'lookUpTable' => [ 'table' => 'tt_news', 'id_field' => 'uid', 'alias_field' => 'title', 'addWhereClause' => ' AND NOT deleted', 'useUniqueCache' => 1, 'useUniqueCache_conf' => [ 'strtolower' => 1, 'spaceCharacter' => '-', ], ], ], [ 'GETvar' => 'tx_ttnews[backPid]', ], [ 'GETvar' => 'tx_ttnews[swords]', ], ], ], ],
realurl_conf.php (Auszug):
'preVars' => [ // EXT:tt_products - remove parameter [ 'GETvar' => 'tt_products[backPID]', 'valueMap' => [ 'dummy' => '1', ], 'noMatch' => 'bypass', ], ], 'postVarSets' => [ '_DEFAULT' => [ // EXT:tt_products 'categories' => [ [ 'GETvar' => 'tt_products[cat]', 'lookUpTable' => [ 'table' => 'tt_products_cat', 'id_field' => 'uid', 'alias_field' => 'title', 'addWhereClause' => ' AND NOT deleted', 'languageGetVar' => 'L', 'useUniqueCache' => 1, 'useUniqueCache_conf' => [ 'strtolower' => 1, 'spaceCharacter' => '-', ] ] ] ], 'products' => [ [ 'GETvar' => 'tt_products[product]', 'lookUpTable' => [ 'table' => 'tt_products', 'id_field' => 'uid', 'alias_field' => 'title', 'addWhereClause' => ' AND NOT deleted', 'languageGetVar' => 'L', 'useUniqueCache' => 1, 'useUniqueCache_conf' => [ 'strtolower' => 1, 'spaceCharacter' => '-', ] ] ] ], 'backPID' => [ [ 'GETvar' => 'tt_products[backPID]', 'lookUpTable' => [ 'table' => 'pages', 'id_field' => 'uid', 'alias_field' => 'title', 'addWhereClause' => ' AND NOT deleted', 'languageGetVar' => 'L', 'useUniqueCache' => 1, 'useUniqueCache_conf' => [ 'strtolower' => 1, 'spaceCharacter' => '-', ] ] ] ], ], ],
Wenn z.B. einige Seiten in Ordnern angelegt wurden, um die Menüausgabe zu beeinflussen (www.example.org/topmenu/impressum.html), kann man die Ordner aus dem RealURL-Pfad entfernen. In den Seiteneigenschaften wird dafür Exclude from speaking URL
aktiviert. Wurden die Seiten schon im Frontend aufgerufen, muss der RealURL-Cache gelöscht werden (siehe unten).
In der Ansicht WEB > Info können die im Frontend verwendeten Pfade eingesehen und verändert werden. Hierfür wird RealURL management und ID-to-path-mapping ausgewählt. Der Pfad kann wahlweise geändert oder gelöscht werden. Im letzteren Fall wird RealURL den Pfad selbständig neu anlegen. Falls dabei Probleme auftreten: TYPO3-Cache löschen, aus dem Backend abmelden oder die Seite(n) mit einem anderen Browser aufrufen.
Dies kann auch nötig werden, wenn man eine neue Seite erstellt, die denselben Namen trägt wie eine ältere, deaktivierte. Durch den RealURL-Cache wird im Frontend noch auf die alte Seite verwiesen, was zu Fehlern führt.
Einen manuellen Pfad stellt man am besten über die Seiteneigenschaften ein, wo nach Installation von RealURL das neue Feld Speaking URL path segment
existiert.
Falls statt der oben angegebenen die automatische Konfiguration aktiviert wurde, erstellt RealURL diese für den aktuellen Stand der TYPO3-Instanz. Werden neue Domains oder Sprachen hinzugefügt, wird diese Konfiguration nicht aktualisiert! Daher muss die Datei _autoconf.php
unter typo3conf/realurl/ gelöscht werden. Ist diese nicht mehr vorhanden, legt RealURL eine neue Konfiguration an.
'pagePath' => array( 'type' => 'user', 'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main', 'spaceCharacter' => '-', 'languageGetVar' => 'L', 'expireDays' => 7, 'rootpage_id' => 1, # Seiten-IDs: 'excludePageIds' => '3,7,11', ),
Eine mehrsprachige Seite sollte dem Nutzer auch eine lokalisierte Fehlermeldung ausgeben, wenn mal eine Seite nicht gefunden werden kann. Mit eingerichtetem RealURL kann folgender Code verwendet werden. Ab TYPO3 CMS 6.x muss dieser in die AdditionalConfiguration.php
in typo3conf/
, in älteren Versionen kam er direkt in die localconf.php
.
Zudem werden die lokalisierten Inhalte auf einer Seite mit dem Namen „404“ direkt unterhalb der Root-Ebene eingetragen.
<?php if (!defined('TYPO3_MODE')) {die('Access denied.');} if (preg_match('/\/en\//', $_SERVER['REQUEST_URI']) || $_GET['L'] == 1) { $GLOBALS['TYPO3_CONF_VARS']['FE']['pageNotFound_handling'] = '/en/404/'; } else { $GLOBALS['TYPO3_CONF_VARS']['FE']['pageNotFound_handling'] = '/404/'; } ?>
Quelle: http://blog.exites.de/blog/2011/12/404-fehlerseite-bei-mehrsprachiger-typo3-seite-und-realurl/
Hierfür muss noMatch
aus der realurl_conf.php entfernt werden und stattdessen valueDefault
hinzugefügt werden. Beachte: als Wert das gewünschte Kürzel eintragen, nicht die UID der Sprache!
Über TypoScript wird der GET-Parameter L
mit 0
als Default-Wert ausgegeben, falls nicht anderweitig gesetzt.
Typoscript:
config.defaultGetVars.L = 0
realurl_conf.php (Auszug):
'preVars' => array( array( 'GETvar' => 'L', 'valueMap' => array( 'de' => '0', 'en' => '1', ), // 'noMatch' => 'bypass', 'valueDefault' => 'de', ), ),