Donnerstag, 24. März 2011

TYPO3: sprechende URLs mit realurl

Für die Suchmaschinenoptimierung sind so genannte "sprechende URLs" von großer Bedeutung. Für TYPO3 gibt es hierfür die Erweiterung realurl, die URLs wie "index.php?id=4" z.B. in "kontakt.html" umwandelt.

Bildlich gesprochen bedeutet das:
wird zu

Ich möchte hier zeigen, wie man diese Erweiterung in einem TYPO3-System einsetzen kann.



1. Erweiterung realurl installieren
Die Erweiterung realurl über den Erweiterungsmanager importieren und dann installieren. 


2. Erweiterung dix_urltool installieren
Die Erweiterung dix_urltool vereinfacht die Konfiguration von realurl. Sie ist nicht zwingendermaßen notwendig, um realurl zu verwenden, ich kann sie aber nur sehr empfehlen und verwende sie eigentlich immer in Verbindung mit realurl.
Nach der Installation von dix_urltool erscheint ein neuer Navigationspunkt "UrlTool" in der Rubrik "Admin-Werkzeuge".
Hinweis: Ich rate dringend von der Verwendung der Extension aeurltool ab, da diese Sicherheitslücken enthält und nicht weiterentwickelt wird.

3. realurl mit dem UrlTool konfigurieren
Um realurl mit dem UrlTool zu konfigurieren, klickt man auf den neu erschienenen Navigationspunkt "UrlTool" unter "Admin-Werkzeuge". Im Dropdown oben rechts wählt man jetzt "RealUrl-Konfiguration" aus. Dann aktiviert man die Checkbox "Diese Realurl-Konfiguration verwenden" und kopiert in das Textfeld "RealUrl-Konfiguration" folgende Konfiguration:
array (
        'init' => array (
            'enableCHashCache' => '1',
            'appendMissingSlash' => 'ifNotFile',
            'enableUrlDecodeCache' => '1',
            'enableUrlEncodeCache' => '1',
        ),
        'redirects' => array (
        ),
        'preVars' => array (
            '0' => array (
                'GETvar' => 'no_cache',
                'valueMap' => array (
                    'nc' => '1',
                ),
                'noMatch' => 'bypass'
            ),
            '1' => array (
                'GETvar' => 'L',
                'valueMap' => array (
                    'de' => '0',
                    'en' => '1',
                ),
                'noMatch' => 'bypass',
            ),
            '2' => array (
                'GETvar' => 'lang',
                'valueMap' => array (
                    'de' => 'de',
                    'en' => 'en',
                ),
                'noMatch' => 'bypass',
            ),
        ),
        'pagePath' => array (
            'type' => 'user',
            'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
            'spaceCharacter' => '-',
            'languageGetVar' => 'L',
            'expireDays' => '7',
            'rootpage_id' => '1',
        ),
        'fixedPostVars' => array (
        ),
        'postVarSets' => array (
            '_DEFAULT' => array (
                'archive' => array (
                    '0' => array (
                        'GETvar' => 'tx_ttnews[year]',
                    ),
                    '1' => array (
                        'GETvar' => 'tx_ttnews[month]',
                        'valueMap' => array (
                            'january' => '01',
                            'february' => '02',
                            'march' => '03',
                            'april' => '04',
                            'may' => '05',
                            'june' => '06',
                            'july' => '07',
                            'august' => '08',
                            'september' => '09',
                            'october' => '10',
                            'november' => '11',
                            'december' => '12',
                        ),
                    ),
                ),
                'browse' => array (
                    '0' => array (
                        'GETvar' => 'tx_ttnews[pointer]',
                    ),
                ),
                'select_category' => array (
                    '0' => array (
                        'GETvar' => 'tx_ttnews[cat]',
                    ),
                ),
                'article' => array (
                    '0' => array (
                        'GETvar' => 'tx_ttnews[tt_news]',
                        'lookUpTable' => array (
                            'table' => 'tt_news',
                            'id_field' => 'uid',
                            'alias_field' => 'title',
                            'addWhereClause' => ' AND NOT deleted',
                            'useUniqueCache' => '1',
                            'useUniqueCache_conf' => array (
                                'strtolower' => '1',
                                'spaceCharacter' => '-',
                            ),
                        ),
                    ),
                    '1' => array (
                        'GETvar' => 'tx_ttnews[swords]',
                    ),
                ),
            ),
        ),
        'fileName' => array (
//
// if you don't want .html-URLs set the following to "false" (e.g. 'defaultToHTMLsuffixOnPrev' => false,)
// then you get http://www.yourdomain.com/imprint/ instead of http://www.yourdomain.com/imprint.html
//
            'defaultToHTMLsuffixOnPrev' => true,
            'index' => array (
                'rss.xml' => array (
                    'keyValues' => array (
                        'type' => '100',
                    ),
                ),
                'rss091.xml' => array (
                    'keyValues' => array (
                        'type' => '101',
                    ),
                ),
                'rdf.xml' => array (
                    'keyValues' => array (
                        'type' => '102',
                    ),
                ),
                'atom.xml' => array (
                    'keyValues' => array (
                        'type' => '103',
                    ),
                ),
            ),
        ),
    ),

); 

?>

Die Änderungen sollte man dann natürlich auch speichern ;-).


4. realurl im TypoScript aktivieren und konfigurieren
Im root-Template müssen nun noch folgende Zeilen hinzugefügt werden, damit realurl auch verwendet wird:

config.tx_realurl_enable = 1
config.baseURL = http://www.meine-webseite.de/

Als baseURL muss die URL zum Typo-Hauptverzeichnis angegeben werden. Befindet sich das Typo-System nicht auf oberster Domain-Ebene, sondern in einem Unterverzeichnis, so muss dieses in dem baseURL-Pfad mit angegeben werden.


5. .htaccess anpassen
Die sprechenden URLs werden zwar bereits generiert, aber noch kann der Webserver damit nichts anfangen. Die Seite "kontakt.html" kann er nicht finden, da diese HTML-Datei ja physikalisch auch gar nicht existiert und so kommt es zu einem "Not Found"-Error. Damit die neuen URLs auch richtig interpretiert werden können, muss im Hauptverzeichnis des TYPO-Systems eine Datei ".htaccess" liegen, welche folgende Zeilen enthält:

RewriteEngine On

RewriteRule ^typo3$ - [L]
RewriteRule ^typo3/.*$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule .* index.php


6. Cache leeren und Ergebnis testen
Man sollte nicht vergessen, am Ende den Cache zu leeren und zu testen, ob alles funktioniert wie es soll. Ich habe die ganzen Schritte parallel zu diesem Posting in einem Projekt umgesetzt, alles funktioniert wunderbar! =)


7. Mögliche Fehlermeldungen
Wer die Fehlermeldung "Segment “” was not a keyword for a postVarSet as expected!" erhält, der findet in folgendem Blog mögliche Ursachen und Lösungen:
http://mannheim-design.de/realurl-fehler-segment-postvarset-expected/

2 Kommentare:

Unknown hat gesagt…

Hallo!
Diese Anleitung hier nehme ich immer wieder gern als Gedächtnisstütze her :-)
Allerdings gibt es das aeurltool schon seit längerer Zeit nicht mehr. Statt dessen geht aber auch das dix_urltool wunderbar :-)

M hat gesagt…

Danke für den Kommentar. aeurltool gibt es wegen einer XSS-Lücke tatsächlich nicht mehr. Ich habe den Post entsprechend aktualisiert!

Kommentar veröffentlichen