Resumindo, quero ter os dois example.com/aJ5
e example.com/any-other-url
trabalhar juntos. Estou usando o Apache e não sou muito bom em escrever regex.
Já tenho um global RewriteRule
que envia tudo para o ponto de entrada do app. O que eu preciso é dizer ao Apache if length($path) is <= 5 chars
e 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_URI
for 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 RewriteCond
referê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.