D'autres ont répondu à la question de savoir comment fonctionnent les redirections, mais vous devez également savoir comment elles génèrent leurs petites URL. Vous entendrez à tort qu'ils créent un hachage de l'URL afin de générer ce code unique pour l'URL raccourcie. C'est faux dans la plupart des cas, car ils n'utilisent pas d'algorithme de hachage (où il pourrait y avoir des collisions).
La plupart des services de raccourcissement d'URL populaires prennent simplement l'identifiant de l'URL dans la base de données et le convertissent en base 36 [a-z0-9] (insensible à la casse) ou en base 62 (sensible à la casse).
Exemple simplifié d'une table de base de données TinyURL :
ID URL VisitCount
1 www.google.com 26
2 www.stackoverflow.com 2048
3 www.reddit.com 64
...
20103 www.digg.com 201
20104 www.4chan.com 20
Les frameworks web qui permettent un routage flexible facilitent la gestion des URL entrantes (Ruby, ASP.NET MVC, etc.).
Ainsi, sur votre serveur web, vous pouvez avoir une action de route qui ressemble à (pseudo-code) :
Route: www.mytinyurl.com/{UrlID}
Route Action: RouteURL(UrlID);
qui achemine toute requête entrante vers votre serveur qui contient du texte après votre domaine www.mytinyurl.com vers votre méthode associée, RouteURL. Elle fournit à cette méthode le texte qui est passé après la barre oblique de votre URL.
Disons que vous avez demandé : www.mytinyurl.com/fif
"fif" serait alors transmis à votre méthode, RouteURL(String UrlID). RouteURL convertirait alors "fif" en son équivalent en base10, 20103, et une requête de base de données serait effectuée pour rediriger vers l'URL stockée sous l'ID 20103 (dans ce cas, www.digg.com). Vous augmenterez également le nombre de visites pour Digg d'une unité avant de rediriger vers l'URL correcte.
Il s'agit d'un exemple très simplifié, mais vous devriez pouvoir en saisir l'idée générale.