Другие ответили, как работают перенаправления, но вы также должны знать, как они генерируют свои крошечные URL-адреса. Вы по ошибке услышите, что они создают хэш URL, чтобы сгенерировать этот уникальный код для сокращенного URL. Это неверно в большинстве случаев, они не используют алгоритм хеширования (где вы могли бы потенциально иметь коллизии).
Большинство популярных сервисов сокращения URL-адресов просто принимают идентификатор в базе данных URL-адреса и затем преобразуют его в Base 36 [a-z0-9] (без учета регистра) или в Base 62 (с учетом регистра).
Упрощенный пример таблицы базы данных 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
Веб-фреймворки, обеспечивающие гибкую маршрутизацию, упрощают обработку входящих URL-адресов (Ruby, ASP.NET MVC и т. Д.).
Итак, на вашем веб-сервере у вас может быть действие маршрута, похожее на (псевдокод):
Route: www.mytinyurl.com/{UrlID}
Route Action: RouteURL(UrlID);
, который направляет любой входящий запрос на ваш сервер, на котором есть текст после вашего домена www.mytinyurl.com, к вашему связанному методу RouteURL. Он предоставляет текст, который передается после косой черты в вашем URL для этого метода.
Итак, допустим, вы просили: www.mytinyurl.com/fif
Тогда "fif" будет передан вашему методу RouteURL (String UrlID). Затем RouteURL преобразует «fif» в его эквивалент base10, 20103, и будет сделан запрос к базе данных для перенаправления на любой URL-адрес, хранящийся под идентификатором 20103 (в данном случае www.digg.com). Вы также увеличите количество посещений Digg на один, прежде чем перенаправлять на правильный URL.
Это действительно упрощенный пример, но вы должны понять общую идею.