Zum Inhalt springen
TYPO3 Routing: sprechende URLs mit Site Configuration

Die Site Configuration als Grundlage für Routing in TYPO3 v9

TYPO3 9.5 beherrscht "Sprechende URLs" ohne Erweiterungen. Ihr benötigt nur eine Site Configuration.

Dieses Tutorial erläutert die Einrichtung der Site Configuration, um im nächsten Schritt einen wichtigen Teil der Routing Enhancers erklären zu können: den Extbase Plugin Enhancer. Wer sich bereits mit der Site Configuration beschäftigt hat, kann dieses Tutorial also getrost überspringen.

Einleitung

"Sprechende URLs", also für Menschen gut lesbare Adressen einer Website, wurden in TYPO3 bisher mit Erweiterungen Dritter gelöst – etwa mit RealURL oder auch CoolURI. Doch seit Version 9.5 LTS beherrscht der TYPO3-Core selbst die Umschreibung von URLs.

Ein paar Fakten zum neuen Routing:

  • Das ganze basiert auf der Symfony Routing Component.
  • Nach Einrichtung einer Site Configuration funktioniert bereits die Umschreibung von Seiten ("beispiel.de/home" statt "beispiel.de/index.php?id=1").
  • Mit einer Site Configuration erhalten alle Seiten ein neues Feld in den Seiteneigenschaften: das URL-Segment (in etwa vergleichbar mit dem früheren realurl_pathsegment).
  • Auch Übersetzungen von Seiten werden berücksichtigt.
  • Für das Umschreiben von Extbase-Plugins (z.B. News) oder anderer URL-Parameter benötigt man Routing Enhancers.
  • Routing Enhancers werden manuell in der Site Configuration (config.yaml) ergänzt.

Da sich die Behandlung übersetzter Seiten in TYPO3 v9 grundlegend geändert hat, wird RealURL für diese und weitere TYPO3-Versionen nicht mehr aktualisiert werden! Höchste Zeit also, sich mit dem neuen Routing in TYPO3 zu beschäftigen.

Vorteile und Umfang der Site Configuration:

  • Bequeme Verwaltung mehrerer Websites innerhalb einer TYPO3-Installation (alle Seiten mit Einstellung is_siteroot).
  • Einrichtung von Sprachen und Fallbacks je Website. Toll hier: Man kann die bestehende Domain bei Übersetzungen um Sprachkürzel ergänzen ("my-domain.com/fr/") oder auch eine ganz eigene Domain für eine Sprache vergeben ("mon-domain.fr").
  • Behandlung von HTTP-Fehlermeldungen (z.B. "Zeige Inhalt von Seite" oder ein eigenes Fluid-Template).
  • Auch sehr praktisch: die sogenannten Static Routes ermöglichen z.B. die Bereitstellung einer individuellen robots.txt je Website.
  • Alle Konfigurationen einer Website werden in einer gemeinsamen YAML-Datei gespeichert.
  • Domain Records werden überflüssig.

Einrichtung einer Site Configuration

Im TYPO3-Backend rufen wir das Modul "Seitenverwaltung > Sites" auf. Hier werden alle root-Seiten aufgelistet. Wählt hier den Button "Add new site configuration for this site".

Die Pflichtangaben einer neue Site Configuration sind:

  1. Der Site Identifier (wird als Name eines neuen Unterordners in typo3conf/sites/ verwendet, beachtet also bitte die hier angegebenen Vorgaben)
  2. Der Entry Point: verwendet am besten eine komplette URL mit Protokoll und Domain. Wenn ihr nur einen Slash verwendet, kann es zu Problemen mit dem Error Handling kommen! Für lokale Entwicklungsumgebungen könnt ihr eine Variante anlegen.
  3. Das Einrichten der Sprache: auch wenn eure Website nur eine einzige Frontend-Sprache besitzt, muss diese konfiguriert werden! Diese Angaben werden von TYPO3 dann etwa im HTML-Tag ausgegeben (<html lang="en">).

Ich beschränke mich hier auf die notwendigen Einstellungen für das Routing. Hier gibt es weitere Informationen zu den Möglichkeiten: https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/SiteHandling/Index.html

Die fertige Konfiguration eurer Website findet ihr nach dem Speichern unter /typo3conf/sites/dein_identifier/config.yaml

Die erstellte config.yaml sieht dann ungefähr so aus:

rootPageId: 7
base: 'https://mydomain.de/'
baseVariants:
  -
    base: 'http://mydomain.test/'
    condition: 'applicationContext == "Development"'
languages:
  -
    title: English
    enabled: true
    languageId: '0'
    base: /
    typo3Language: default
    locale: en_US.UTF-8
    iso-639-1: en
    navigationTitle: English
    hreflang: en-US
    direction: ''
    flag: en-us-gb
errorHandling: {  }
routes: {  }

Warte einen Moment! 'applicationContext'?

Für die lokale Entwicklung habe ich einen alternativen Entry Point (baseVariants) gesetzt. Dieser greift im applicationContext, welcher z.B. in der .htaccess gesetzt werden kann. In der Default-.htaccess von TYPO3 ist dies bereits vorbereitet. Sie muss nur angepasst und aktiviert werden:

  RewriteCond %{HTTP_HOST} ^mydomain\.test$
  RewriteRule .? - [E=TYPO3_CONTEXT:Development]

Der aktuelle Application Context erscheint im TYPO3 Backend in der Anwendungsinformation (obere Leiste):

Übrigens: die baseVariants lassen sich auch für die in der config.yaml eingerichteten Sprachen eurer Website nutzen. Ein Beispiel findet ihr im dazugehörigen Changelog-Eintrag.

Über das URL-Segment

Wenn eine Site Configuration vorhanden ist, wird TYPO3 automatisch URL-Segmente für den dazugehörigen Seitenbaum erstellen.

Dabei wird der Seitentitel verwendet und in Kleinbuchstaben umgewandelt. Leerzeichen werden durch Bindestriche ersetzt, Sonderzeichen entfallen.

In der Suchmaschinenoptimierung (SEO) werden die lesbaren URL-Segmente Slugs genannt.

Wenn zwei oder mehr Seiten auf der gleichen Seitenbaum-Ebene denselben Namen besitzen, wird TYPO3 die URL-Segmente mit einer Endung versehen, damit alle URLs eindeutig zuweisbar bleiben (z.B. /seitentitel-1).

Alle URL-Segmente können in den Seiteneigenschaften angepasst werden:

  • entweder automatisch per Button, wobei die aktuelle Pfadstruktur in das Feld kopiert wird
  • oder komplett manuell

So könnte die Unterseite, die im Seitenbaum unter "Buchhandel > Non-Book > Poster" liegt, trotzdem unter "domain.de/poster" aufrufbar sein, indem man die anderen Seiten manuell aus dem URL-Segment dieser Seite entfernt.

Selbstverständlich gibt es für alle übersetzten Seiten ein eigenes Feld für das URL-Segment.

FAQ zum neuen TYPO3 Routing

Einige Anwendungsfälle werden vom neuen Routing noch nicht abgedeckt. Aber natürlich wird schon an der Verbesserung gearbeitet. So ist geplant, den Editor beim Änderung eines Seitentitels wählen zu lassen zwischen a) dem Beibehalten der bisherigen URL Segmente oder b) der automatischen Einrichtung von Weiterleitungen für die vorherigen Pfade.

Ändert sich das URL-Segment, wenn ich eine Seite umbenenne?

Nicht automatisch, das muss manuell in den Seiteneigenschaften erfolgen. Eine automatische Änderung von URLs wäre auch schlecht für das Ranking in Suchmaschinen, da alte URLs nicht mehr aufrufbar wären. Nach der manuellen Anpassung sollte also eine Weiterleitung im neuen Backend-Modul "Redirects" eingerichtet werden.

Wie kann ich das geänderte URL-Segment auf alle Unterseiten übertragen?

Auch hier gilt: dies bietet der TYPO3-Core derzeit noch nicht automatisiert. Die Änderung muss in jeder Seite einzeln erfolgen. Leider lassen sich die URL-Segmente auch nicht im Single Table View gemeinsam ändern – zumindest der Button zur automatischen Rekalkulation funktioniert nicht. Hier scheint TYPO3 der nötige Kontext zu fehlen.

Allerdings gibt es zwei Extensions, die euch bei der Pflege von Slugs unterstützen könnten:

Kann ich eine Elternseite komplett aus dem URL-Segment der Unterseiten entfernen?

Nur manuell, in jeder Unterseite einzeln. Es ist aktuell noch nicht möglich, eine normale Seite automatisch immer aus den Slugs herauszuhalten. Ein möglicher Workaround: die Seiten-Typen mit einem doktype-Wert von mehr als 200 werden im URL-Segment immer ignoriert. Dazu zählen Ordner, Trennzeichen (Spacer) und Papierkörbe. Bedenkt dabei aber, dass sich diese Seitentypen nicht im Frontend aufrufen lassen!

Zurück