Ich versuche, eine URL-Verkürzer-Anwendung für die Praxis mit Django zu entwickeln. Ich verstehe nicht, wie kann ich erstellen eindeutige Zeichenfolgen für jede lange URL als eine kurze URL zu verwenden. Etwas wie andere beliebte URL-Verkürzer tun. Wie kann ich das machen? Ist es möglich, alle Kurz-URLs der gleichen Länge zu machen?
Antworten
Zu viele Anzeigen?-
Ich verstehe nicht, wie ich eindeutige Zeichenfolgen für jede lange URL erstellen kann, um sie als kurze URL zu verwenden. Etwas wie andere beliebte URL-Verkürzer tun.
Wie sugerman schon sagte, ist das ganz einfach: Sie erstellen einfach eine Hashtabelle. -
Wie kann ich das tun?
Es gibt dynamische Möglichkeiten, dies zu tun, aber die einfachste und effektivste ist, eine 2-Feld-Tabelle in einer Datenbank zu haben, die den Hashkey und die vollständige URL enthält. Dann kann Ihr Server, z. B. der Apache, auf die richtige Seite umleiten. -
Ist es möglich, alle Kurzurls gleich lang zu machen?
Ja, bis zu einem gewissen Grad, aber sobald Sie die maximale Anzahl von Schlüsseln erreicht haben, müssen Sie die Kurzurl-IDs wiederverwenden/ersetzen. Wenn Sie eine feste Länge festlegen, schränken Sie die Anzahl der Möglichkeiten ein.
Meine Frage an Sie:
Ich gehe davon aus, dass durch URL shortener
Sie beziehen sich auf etwas wie jsFiddle oder ein pastebin, in dem sie etwas wie http://jsfiddle.net/sdfj2/
. Andernfalls bräuchten wir mehr Klarheit.
Sie werden wahrscheinlich eine einfache Datenbank-Tabelle erstellen wollen, die einen kurzen Wert einer URL zuordnet.
Die einfachste Kurzurl, die Sie erstellen können, wäre eine fortlaufende Nummer oder eine Autoinkrement-Spalte (weisen Sie dem ersten Wert eine 1 zu, dann eine 2 und so weiter)
Es ist möglich, alle URLs gleich lang zu machen, solange es nicht zu viele Werte gleicher Länge gibt, z. B. wenn Sie nur Zahlen verwenden würden (als einfaches Beispiel), wären es 0000 bis 9999.
Der magische Teil wäre, wo Sie mod_rewrite verwenden würden, um die URL als Parameter an Ihr Skript zu übergeben, damit Ihre Anwendung den Wert in der Datenbank nachschlagen und den Benutzer dann umleiten kann.
Diese Rewrite-Regel für mod_rewrite leitet eine URL wie example.com/0000 auf example.com/index.py?id=0000 um. Sie würden dies in .htaccess eintragen (ich nehme an, Sie verwenden Apache).
Ihre Anwendung liest einfach die ID und leitet zur entsprechenden Seite weiter.
RewriteRule ^([0-9]+)/?$ index.py?id=$1 [QSA,L]
Wenn Sie sich für einen Hash oder eine einfache base64-Seriennummer entscheiden (was eine kompaktere Autoinkrementierung wäre), würde es nur etwas anders aussehen:
RewriteRule ^(.*)/?$ index.py?id=$1 [QSA,L]
Ich habe den oben verlinkten Blog-Beitrag verfasst und bin dabei im Wesentlichen folgendermaßen vorgegangen
Speichern Sie die lange Url in einer Tabelle mit einem automatisch inkrementierenden Indexfeld. Rufen Sie den Index ab. Konvertieren Sie ihn in eine Zeichenkette, genauso wie Sie ihn in eine hexadezimale oder oktale Zahl konvertieren würden, aber verwenden Sie alle verfügbaren Zeichen als mögliche "Ziffern". Angenommen, wir haben a-z, A-Z und 0-9 zur Verfügung, dann gehen Sie wie folgt vor:
0 = 0 1 = 1 ... 9 = 9 10 = a 11 = b ... 35 = z 36 = A 37 = B ... 60 = Z 61 = 10 62 = 11 ... 70 = 19 71 = 1a 72 = 1b
Haben Sie das Muster verstanden? Es handelt sich um einen allgemeinen Umwandlungsalgorithmus von einer Basis-10-Zahl in eine Basis-n-Zahl, wobei n die Anzahl der zur Verfügung stehenden Zeichen ist.
Sie werden wahrscheinlich eine Hash-Funktion um die verkürzte URL zu erzeugen.
Editer :
Anstatt hier zu sitzen und einen ziemlich ausführlichen Wikipedia-Artikel für Sie zusammenzufassen, hier ist ein Link zu einem Blog-Beitrag, in dem erklärt wird, wie Hash-Funktionen in Bezug auf Ihr Thema (URL-Verkürzungen) funktionieren.
Siehe django-shorturls app.
- See previous answers
- Weitere Antworten anzeigen