Grundlagenforschung
Die erste Frage lautet: was sind Kurz-URLs und wie funktionieren sie?
Die Idee ist ganz einfach: Eine lange, unübersichtliche URL ist sehr unhandlich wenn man sie weitergeben, speichern oder merken will. Nun gibt es im Internet diverse Dienstleister, die Kurz-URLs anbieten. Die lange URL wird in ein Formularfeld eingegeben, der Dienstleister gibt eine kurze URL (unter dessen Domain) zurück.
Diese Kurz-URL ist im Regelfall einfach eine Weiterleitung auf die lange URL.
Mittlerweile gibt es aber auch viele weitere Funktionen wie z.B. Statistiken (wie oft wurde die Kurz-URL aufgerufen) oder sogar zwischengeschaltete Werbung. In diesem Beitrag werden wir unseren eigenen Kurz-URL-Dienst in unserer Joomla!-Installation basteln und zwar mit Core-Mitteln, das bedeutet ohne fremde Erweiterungen.
Die Umleitungskomponente
Joomla! bietet seit einigen Versionen die sogenannte "Umleitungen"-Komponente an. Diese kommt (mithilfe eines Plugins) immer zum Tragen, wenn eine Seite aufgerufen wird, die nicht existiert und Joomla! z.B. eine 404 Fehlermeldung wirft. Hier hat der Administrator nun die Möglichkeit, im Backend eine alternative URL anzugeben, auf die im Fehlerfall weitergeleitet wird.
- Das "System - Umleitung"-Plugin muss aktiviert sein (also falls noch nicht geschehen, direkt jetzt tun)
- Die Umleitungen funktionieren nur, wenn Joomla! einen Fehler wirft, existiert die Seite, passiert keine Umleitung, selbst wenn eine definiert wurde.
Unsere erste Kurz-URL in Joomla!
Nun werden wir die erste Kurz-URL einrichten. Der normale Weg ist, in die Umleitungen-Komponente zu gehen, auf "Neu" zu drücken und in dem Formular bei "Alte Adresse" die Kurz-URL anzugeben und bei "Neue Adresse" die Weiterleitung. Danach das Aktivieren nicht vergessen!
Wir wählen in diesem Beispiel also als Kurz-URL https://www.example.com/a und wollen diese dann auf https://www.example.com/meine-sehr-lange-url.html weiterleiten. example.com ist dann natürlich die eigene Domain und die URL https://www.example.com/a darf in Joomla! nicht als valide Seite existieren.
Weitere Verbesserungen
Die erste Kurz-URL ist angelegt und sollte funktionieren. Im Prinzip können nun vogelwild weitere Kurz-URL in Joomla! angelegt werden. Aber hier kommen wir schon direkt an die erste Grenze: wie oben zweimal erwähnt, können nur nicht existierende Seiten als Kurz-URL in Joomla! angelegt werden. Das bedeutet, wenn wir einen Menüpunkt https://www.example.com/hallo haben, kann darauf keine Weiterleitung eingerichtet werden. Lösungen?
Präfix nutzen
Es würde sich anbieten, dass man einen eigene "Kontext" schafft. Das bedeutet, man "opfert" zwei Zeichen und baut sich die Kurz-URL in einem Untersegment. Dies könnte z.B. so aussehen: https://www.example.com/a/hallo. Solange es keinen Menüpunkt (oder mit neuem Router Alias) mit dem Namen "a" gibt, kann jede Kurz-URL mit dem Präfix "a" erstellt werden.
Zweite Domain registrieren
Eine weitere Optimierung könnte das Registrieren einer weiteren Domain sein. Gerne werden hierzu Domains aus exotischen Länder genutzt, die noch freie Plätze im zwei- oder dreistelligen Domainnamen haben (z.B. abc.tld) Das spart nochmals einiges an Zeichenanzahl.
Zusätzlich gibt es drei nette "Features" in Joomla!: zum einen kann man beliebig viele Domains auf eine Joomla!-Installation zeigen lassen und Joomla! funktioniert mit allen gleich. Zum anderen kann man auch absolute "Kurz-URL" in der Weiterleitungen-Komponente angeben ("absolut" bedeutet mit Domain). Dann wird die Weiterleitung nur angeworfen, wenn man über diese Domain den 404 generiert und last but not least kann man bei der "Neuen Adresse" jede beliebige interne oder externe Domain angeben. Das heißt, man kann von Domain A auf Domain B leiten.
Also nehmen wir mal an, wir haben zwei Domains: https://abc.tld und https://www.regulaere-domain.tld. Nun können wir folgendes anlegen:
Ruft nun jemand https://abc.tld/a auf, wird er auf https://www.regulaere-domain.tld/meine-sehr-lange-url.html geleitet. Wir haben somit den perfekten Kurz-URL-Dienst mit Joomla!-Boardmitteln umgesetzt.
Perfekt?
Nun noch ein Programmierer-Gedanke: Wir haben trotz zwei Domain und dem Präfix immer diese kleine Krücke, dass wir keine Kurz-URL nutzen können, die als reguläre Joomla!-Seite existiert. Hier wäre es doch schön, wenn es dafür auch eine Lösung gäbe...die gute Nachricht ist: die gibt es!
Voraussetzung sind wieder zwei Domains: einmal die reguläre Seitendomain und einmal unsere "Kurz-URL-Domain", die nur für Kurz-URLs genutzt werden soll. Wir erinnern uns von vorhin: nur Fehlerseiten können weitergeleitet werden. Nunja, nichts einfacher als das. Lasst uns doch einfach alle Aufrufe dieser Kurz-URL-Domain in eine Fehlerseite laufen und somit alle Aufrufe weiterleitbar machen.
Dazu gehen wir in die index.php unseres Templates und fügen weit oben folgenden Code ein:
// Laden des Uri-Namespaces use Joomla\CMS\Uri\Uri; // Überprüfen, ob der Aufruf über unsere Kurz-URL-Domain kommt if (Uri::getInstance()->getHost() == 'abc.tld') : // 404 verursachen throw new Exception('Nope', 404); endif;
Tadaa, kombiniert mit der Eigenschaft, absolute URLs zu verwenden und auf interne und externe Domains weiterleiten zu können, haben wir unseren eigenen Kurz-URL-Dienst mit Joomla! erschaffen. Und wer noch eine Statistik benötigt, der kann z.B. die Banner-Komponente dazwischen schalten. Wie das genau geht, kommt vielleicht in einem anderen Beitrag.