Outros responderam como funcionam os redirecionamentos, mas você também deve saber como eles geram seus pequenos urls. Você ouvirá por engano que eles criam um hash do URL para gerar esse código exclusivo para o URL encurtado. Isso é incorreto na maioria dos casos, eles não estão usando um algoritmo de hash (onde você pode potencialmente ter colisões).
A maioria dos serviços de encurtamento de URL populares simplesmente pega o ID no banco de dados do URL e, em seguida, converte-o em Base 36 [a-z0-9] (não diferencia maiúsculas de minúsculas) ou Base 62 (diferencia maiúsculas de minúsculas).
Um exemplo simplificado de uma tabela de banco de dados 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
Frameworks da Web que permitem o roteamento flexível tornam o manuseio de URLs de entrada realmente fácil (Ruby, ASP.NET MVC, etc).
Portanto, em seu servidor da web, você pode ter uma ação de rota semelhante a (pseudo código):
Route: www.mytinyurl.com/{UrlID}
Route Action: RouteURL(UrlID);
Que roteia qualquer solicitação de entrada para o seu servidor que tenha qualquer texto após o seu domínio www.mytinyurl.com para o método associado, RouteURL. Ele fornece o texto que é passado após a barra em seu URL para esse método.
Então, digamos que você solicitou: www.mytinyurl.com/fif
"fif" seria então passado para seu método, RouteURL (String UrlID). RouteURL então converteria "fif" em seu equivalente de base10, 20103, e uma solicitação de banco de dados será feita para redirecionar para qualquer URL armazenado sob a ID 20103 (neste caso, www.digg.com). Você também aumentaria a contagem de visitas do Digg em um antes de redirecionar para o URL correto.
Este é um exemplo realmente simplificado, mas você deve conseguir ter uma ideia geral.