Esse assunto tem sido abordado muito recentemnente. Sabemos que existem encurtador de URLS como bit.ly e outos mas suas apis são pagas.
Segue hoje um exemplo de como criar seu próprio encurtador:
Acreditando que o apache da sua hospedagem permite a leitura automática de arquvo .htaccess, vamos criar esse arquivo dentro de seu domínio ou em uma pasta existente ou na pasta raíz permitindo ao apache que rescreva a URL digitada em seu domínio, como se segue:
.htaccess
RewriteEngine on
RewriteRule ^([A-Za-z0-9]+) index.php?item=$1 [QSA]
A primeira linha indica a permissão para reescrita.
A Segunda linha interpretamos com uma expressão regular o que foi digitado na parte logo após o domínio e redirecionamos para a página index.php passando esse valor como parâmetro para que seja capturado e tratado o respectivo valor.
index.php
<?php
$get=filter_input(INPUT_GET, 'item');
if ($get != NULL && trim($get)!='' && $get != 'index')
echo "parâmetro item={$get}"; //aqui vc faz seu redirecionamento.
else echo "Não foi passado parâmetros";
echo '<br>Executou index.php';
Linha 1: Capturamos o valor passdo via GET. Porque não usar $_GET? Simples, por segurança não se deve usar $_GET.
linha 2: Testamos o pagrâmetro passado para que seja tratado a gosto.
Segue o exemplo:
https://iwh.tec.br/1a2b3c
O REGISTRO.BR dia 20/07/2020 as 19h00 liberou vários domínios novos, eu tentei criar um com 2 letras mas todos com 2 letras estavam já é concorrência, mas consegui criar um com 3 letras, somente para usar url encurtada, para enviar links em emails, downloads e redirecionamentos.
Aproveitando vou deixar uma função aqui para gerar keys que podem ser salvas no banco de dados como chave para buscar a URL de destino:
método para criar Key para ser usada em url curta
<?php
define('CHARVALIDATE','0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'); //vc pode mudar as posições dos caracteres
function shortKeyId($id, $charVal = CHARVALIDATE)
{ //$d deve ser um inteiro
$len = strlen($charVal);
$charVal = str_split($charVal);
$return = '';
while($id > $len - 1)
{
$return .= $charVal[fmod($id, $len)];
$id = floor( $id / $len );
}
return $charVal[$id] . $return;
}
echo "resultado=".shortKeyId(3000000000000);
Pelos teste com esse método conseguimos 3 trilhões de registros (combinações únicas) de urls com uma key de apenas 7 caracteres