Benutzer-Werkzeuge

Webseiten-Werkzeuge


typo3:realurl

RealURL

Einrichtung

  1. RealURL installieren
  2. TypoScript ergänzen
  3. Konfiguration anlegen (realurl_conf.php)
  4. .htaccess einrichten

TypoScript

  1. absRefPrefix: Stellt allen in TYPO3 generierten Links den gesetzten String voran, in diesem Beispiel ein Slash /. Dies sorgt für Root-relative Pfade.
  2. prefixLocalAnchors: Fügt Ankern (Sprungmarken auf einer Seite) den vollen Pfad voran.
  3. simulateStaticDocuments: Muss deaktiviert werden, wenn RealURL verwendet wird.
  4. tx_realurl_enable: Aktiviert RealURL.
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äß.

realurl_conf.php

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.

RealURL 2.x + News System (news)

realurl_conf.php
<?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];

.htaccess

Verwendet einfach die .htaccess, die im TYPO3-Core mitgeliefert wird. Diese enthält alle nötigen Konfigurationen.


RealURL-Ergänzungen für Extensions

tt_news

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]',
            ],
        ],
    ],
],

tt_products

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' => '-',
                    ]
                ]
            ]
        ],
    ],
],

Diverses

Ordner aus Pfad entfernen

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

Pfade anpassen: RealURL-Cache

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.

Automatische Konfiguration von RealURL

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.

Einzelne Seiten von RealURL ausschließen

'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',
),

Mehrsprachige 404-Seiten mit RealURL

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/

Defaultsprache immer mit Sprachkürzel in URL

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',
    ),
),
typo3/realurl.txt · Zuletzt geändert: 2018/06/19 18:49 von admin