Dies ist der zweite Teil einer Artikelreihe zum Thema “Kurzlinks selbst bauen”. Den ersten Teil finden Sie hier. Den dritten Teil finden Sie hier.
Für alle Leser des ersten Teils: “Willkommen zurück!”
Wie geht’s weiter?
Der erste Teil umfasste die Grundlagen und Vor- und Nachteile von Kurz-Links. Sie haben erfahren, wie sich mit den “Bordmitteln” des Webserver bereits einfache Kurzlinks erstellen lassen. Dieser Post beschäftigt sich mit sinnvollen Erweiterungen und dem Weg, wie diese kryptischen Kurzlinks überhaupt gebildet werden.
Von der URL zum Kurzlink
Wie entstehen eigentlich diese Zeichen für eine kurze URL, z.B. geh.zu/yDF2TF
oder https://youtu.be/xx7Lfh5SKUQ
? Die Zeichen nach der Domain (z.B. xx7Lfh5SKUQ
) werden mit einem Algorithmus berechnet. Das Wichtigste vorab: daraus wird nicht in irgendeiner Form die orginale URL wieder hergestellt. Dies ist nicht möglich, sondern es wird ein Schlüssel (key) erzeugt und mit der originalen, langen URL in einer Tabelle abgelegt. Beim Aufruf sucht die Software für die Kurz-URLs den Schlüssel in der Tabelle und lädt dann die zugehörige lange URL.
Damit ist auch klar, warum dieser Schlüssel eindeutig sein muss (ein unique key): Sie wollen nicht zwei URLs unter dem gleichen Schlüssel ablegen, das funktioniert nicht (der erste wäre dann weg 😏). Üblich sind die folgenden Methoden.
-
Zähler
Die Software für Kurz-URLs zählt einfach mit jedem neuen Eintrag einen Zähler hoch. Diese Nummer kann dann als Schlüssel verwendet werden. Üblicherweise wird nicht die Zahl direkt verwendet, sondern z.B. mit der Basis 36 (26 Buchstaben und 10 Ziffern) in eine Zeichenkette umgewandelt. Aus59468
wird dann19VW
. Behandeln Sie Groß- und Kleinbuchstaben unterschiedlich, haben Sie schon 62 Zeichen pro “Ziffer” und mit “-
” und “_
” sind es 64 Zeichen, damit können Sie mit nur zwei Zeichen bereits 4096 Links kodieren! Falls Sie Kurz-Links selbst verwalten, können Sie problemlos auch die die Zahl verwenden, Telefonnummern merken sich die Leute ja auch. 😄 -
Hashfunktion
Dies ist die am häufigsten verwendete Methode. Hier wird über eine Funktion ein Hash für die lange URL erzeugt, der einen eindeutigen Schlüssel liefert. Je nach Algorithmus sind die erzeugten Schlüssel unterschiedlich lang bzw. liefern für die gleiche lange URL unterschiedliche Schlüssel.Hier Beispiele für Schlüssel, die mit unterschiedlichen Varianten nur eines Algorithmus erzeugt wurden (die lange URL ist immerhttps://www.arminhanisch.de/2018/12/shortlinks-selbstgemacht/
)- 1n23ykiq (Modified Murmur Hash)
- 1uu79d6 (Murmur Hash base 36)
- 4041494826 (Murmur Hash 32bit)
-
Zufallszwahl
Dieser Ansatz wählt einfach eine Zufallszahl oder eine zufällige Zeichenkette. Ist diese bereits als Schlüssel vorhanden, wird der Zufallsgenerator erneut angeworfen. Ansonsten wie bei den beiden obigen Ansätzen. -
Benutzerdefinierter Wert
Damit lassen sich leicht merkbare Kurz-URLs erzeugen, wie z.B. “t1p.de/arminius” 😄 – wichtig ist dabei ebenfalls die Prüfung auf Verfügbarkeit. Ist die gewünschte “schöne” Kurz-URL bereits vergeben, bleibt nur die Wahl eines anderen Dienstes. Auch hier haben Sie mit einer eigenen Lösung wieder Vorteile, da Ihnen niemand die Auswahl einschränkt. Haben Sie nur wenige Links, ist dieser Ansatz durchaus ein gangbarer Weg.
Speichern
So, jetzt haben Sie eine Handvoll Links und auch einen hübschen, kurzen Schlüssel dafür. Wohin jetzt damit? Eine Möglichkeit habe ich bereits im [ersten Teil]({{ ref “/shortlinks-selbstgemacht” }}) gezeigt. Es spricht für den Anfang nichts dagegen, die Datei .htaccess
(für den Apache) oder die nginx
-Konfiguration als Ablage zu verwenden. Bald werden aber weitere Wünsche auftauchen: Sie möchten neue Kurzlinks direkt über den Browser erzeugen, es gibt keine Möglichkeit der Auflistung existierender Kurzlinks, Komfortfunktionen sind nicht möglich, usw. …
Also muss eine Ablage her. Damit sind wir schon mitten im zweiten Themenbereich dieser Folge: was sollte unser eigener Kurz-URL Dienst denn können?
Nicht nur Holzklasse
Beginnen wir also damit, die Anforderungen festzulegen (OK, ich lege fest und Sie dürfen lesen, aber hey, dafür gibt es die Kommentare und Twitter 😏). Folgende Zusatzfunktionen sollten für den Anfang enthalten sein:
- Eintragen neuer Kurz-URLs über ein Browser-Formular
- Entfernen einer Kurz-URL über ein Browser-Formular
- Anzeigen des Ziels einer Kurz-URL
- Ausgabe eines QR-Codes für den Link
- Auflisten der vorhandenen Kurz-URLs
Verwaltung über Browser-Formular
Das ist ganz einfach eine Frage der Zugänglichkeit. Ich möchte ja unter Umständen eine Kurz-URL erzeugen, wenn ich nicht an einem Rechner sitze, an dem ich Zugang zur Webserver-Konfiguration meines Onlineauftritts habe. Darüber hinaus ist die Bearbeitung z.B. der .htaccess
direkt auf dem Server nicht immer intuitiv (es gibt Witze darüber, wie der Editor vi
beendet wird). Hier sollte allerdings nicht jeder eine Änderung vornehmen dürfen, es braucht also eine Authentifizierung.
Anzeigen des Links-Ziels
Eine der Missbrauchsmöglichkeiten bei Kurz-Links ist ja, das das Ziel des Links nicht mehr sichtbar ist, ich also nicht vor dem Klicken sehen, welchen Server der Browser kontaktieren wird. Es muss also möglich sein, beim Klick auf den Kurz-Link erst einmal zu sehen, wohin die elektronische Reise geht. Nur so kann ich mich dann noch umentscheiden.
QR-Code für einen Link
Man könnte jetzt argumentieren, dass es einen QR-Code nicht braucht, wenn ich den Kurz-Link habe und das ist ein valider Einwand. QR-Codes sind nicht für die Online-Welt, sondern für die Offline-Welt gedacht, z.B. als ausgedruckter Code auf einem Arbeitsblatt oder auf einer Museumstafel für weiterführende Informationen. Online sollte ein Link einfach ein Hyperlink sein. Vor allem zeugt es nicht von Online-Kompetenz, auf einer Webseite einen QR-Code anzubieten ohne mindestens einen ganz normalen Hyperlink darüber oder darunter anzubieten. Hier macht eine Kurz-URL dann wieder Sinn. Die lange URL bekomme ich nämlich im QR-Code auch ohne Kürzen unter, aber der Kurz-Link unter dem QR-Code ist einfach leichter zu lesen oder weiter zu geben.
Auflisten der vorhandenen Kurz-URLs
Irgendwann muss auch die Liste mit den Kurz-URLs “aufgeräumt” werden oder Sie möchten einfach mehrere Links auf einmal weitergeben. Dann ist eine Seite mit einer Auflistung aller vorhandenen Kurz-Links eine gute Idee.
So, damit sind die Anforderungen klar. Wo bekommen wir nun das Tool her?
Tool Time ;-)
Wie immer stellt sich auch bei einem solchen Projekt die Frage: “make or buy?” — also selbst bauen oder kaufendownloaden. Es gibt ja genügend Open Source Tools in diesem Bereich. Warum also selbst bauen? Es heißt doch immer so schön “das Rad nicht neu erfinden” …
Ich gestehe, ich bin ein großer Freund der Idee, Räder neu zu erfinden (ob Sie das nun “neuerfinden” oder “neudefinieren” oder “optimieren” nennen, sei einmal dahin gestellt), sonst würden wir immer noch das Rad links benutzen und würden nicht mit den Rädern rechts Roboter auf dem Mars herum fahren lassen.
Was habe ich gegen die bereits vorhandenen Tools? Die am häufigsten eingesetzten Open Source Tools sind diese hier:
- Z.ips.me https://z.ips.me/
- wURLie https://wurlie.net/
- Polr https://polrproject.org/
- yourls http://yourls.org/
Erst einmal nichts, Sie erfüllen ihren Zweck und Leute haben da viel Zeit und Arbeit reingesteckt und stellen diese kostenlos zur Verfügung. Das ist aller Ehren wert. Aber (Sie wussten, dass da ein “Aber” kommt, oder?): mir ist bei all diesen Tools die Einstiegsschwelle zu hoch bzw. die Angriffsfläche zu groß. Alles sind PHP-basierte Tools und fast alle nutzen MySQL als Datenspeicher für ide Tabelle mit den Schlüsseln und den langen URLs. Was bedeutet dies für Sie?
- Sie müssen wissen, wie sich PHP auf Ihrem Webauftritt konfigurieren lässt
- Sie müssen sicherstellen, dass Sie eine aktuelle Version von PHP haben (Security, Security)
- Sie müssen eventuell die Scripts an eine neue Version von PHP anpassen
- Sie müssen wissen, ob Sie MySQL auf Ihrem Webserver haben bzw. wie das installiert wird
- Sie müssen MySQL auf dem aktuellen Stand halten und auch hier den Zugang verwalten
Ich denke, Sie sehen, worauf ich hinaus will: wir wollen Kurz-URLs verwalten und nicht einen kompletten Software-Stack für ein paar Dutzend Zeilen aus "kurz" --> "lang"
betreiben!
Falls Sie fit in den obigen Punkten sind, kein Problem. Probieren Sie die Tools aus, Sie funktionieren und erfüllen Ihre Aufgabe. Dann sind Sie aber ehrlich gesagt nicht die Zielgruppe dieses Artikels. 😄 Wir wollen das möglichst niedrigschwellig und zum Aufbauen von Know-How. Danach kann durchaus der Einsatz einer der obigen Tools stehen, aber für den Anfang brauche ich etwas “leichtgewichtigeres”. Daher auch der Entschluss, im [ersten Teil]({{ ref “/shortlinks-selbstgemacht” }}) mit dem Eintrag in der Konfigurationsdatei des Webserver einzusteigen.
Im dritten Teil der Reihe werde ich dann das Design des Tools vorstellen und wir sehen uns den Lebenszyklus einer HTTP-Anfrage etwas genauer an. Keine Angst, Sie müssen nicht programmieren können! Dafür werden Sie nach dem nächsten Teil viel besser wissen, was Ihr Webserver den ganzen Tag so macht. 😏
Danke für’s Lesen und bis zum nächsten Teil!