Faça URLs encurtados e longos funcionarem juntos no mesmo domínio (RewriteRule)

Faça URLs encurtados e longos funcionarem juntos no mesmo domínio (RewriteRule)

Resumindo, quero ter os dois example.com/aJ5e example.com/any-other-urltrabalhar juntos. Estou usando o Apache e não sou muito bom em escrever regex.

Já tenho um global RewriteRuleque envia tudo para o ponto de entrada do app. O que eu preciso é dizer ao Apache if length($path) is <= 5 charse reescrever para outro local.

Eu sei que posso usar {1,5}sintaxe semelhante em regex, mas realmente não sei se é o que estou procurando.

Eu gostaria de implementar isso no nível do servidor web, e não no nível do php. Qualquer ajuda é apreciada.

Responder1

Se você presumir que o -caractere não será incluído em URLs curtos:

RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9]){1,5} 
RewriteRule ^ /app-entry-point?url=%1 [L]

Isso não foi testado, mas algo assim deve funcionar. Essencialmente, você está passando uma condição se REQUEST_URIfor algo como /abc12, o controle muda para qualquer manipulador que você desejar. Ele irá pular URLs com mais de 5 caracteres ou que incluam o caractere 'slug' "-" ou um sublinhado.

%1, a última RewriteCondreferência anterior, será expandida para o URL curto. Coloque isso acima de suas outras regras para impor isso primeiro - com o [L]sinalizador, ele irá parar de reescrever URLs e passar o controle para o aplicativo.

Responder2

 RewriteCond %{REQUEST_URI}   ^/.{1,5}$
 RewriteRule ...

Isso corresponderá a qualquer solicitação entre um e cinco caracteres e executará o seguinte RewriteRule. Qualquer coisa além disso não executará o RewriteRule. A variável REQUEST_URI é o que o navegador passou para o servidor web. O mesmo pode ser tratado em um único RewriteRule, mas o acima permite o encadeamento se necessário.

 ^/.{1,5}$

^ = Corresponde ao início da string
/ = Corresponde apenas a uma barra
. = Corresponde a qualquer caractere que não seja uma nova linha
{1,5} = Informa o mecanismo regex para corresponder ao caractere anterior de 1 a 5 vezes
$ = Corresponde ao caractere de fim de linha

A /.{1,5}$construção informa ao mecanismo regex para corresponder a qualquer sequência de tamanho 1-5 que seja imediatamente seguida pelo caractere de fim de linha e imediatamente precedida pelo /caractere.

informação relacionada