Tornar URLs encurtadas e longas juntas no mesmo domínio (RewriteRule)

2

Para encurtar a história, quero que os dois example.com/aJ5 e example.com/any-other-url trabalhem juntos. Estou usando o apache e não é muito bom em escrever regex.

Eu já tenho um RewriteRule global que envia tudo para o ponto de entrada do aplicativo. O que eu preciso é informar o apache if length($path) is <= 5 chars e depois reescrever para outro local.

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

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

    
por Renato Renato 27.12.2010 / 17:06

2 respostas

2

Se você puder assumir 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 é algo como /abc12 , o controle muda para qualquer manipulador desejado. Ele ignorará URLs com mais de 5 caracteres ou incluirá o caractere "slug" "-" ou um sublinhado.

%1 , a última RewriteCond backreference, será expandida para o URL curto. Coloque isso acima de suas outras regras para impor isso primeiro. Com o sinal [L] , ele pára de reescrever URLs e passar o controle para o aplicativo.

    
por 27.12.2010 / 17:34
1
 RewriteCond %{REQUEST_URI}   ^/.{1,5}$
 RewriteRule ...

Isso corresponderá a qualquer solicitação entre um e cinco caracteres e executará o seguinte RewriteRule. Qualquer coisa mais longa, então, não executará o RewriteRule. A variável REQUEST_URI é o que o navegador transmitiu ao servidor da web. O mesmo poderia ser tratado em um único RewriteRule, mas o acima permite o encadeamento se você precisar dele.

 ^/.{1,5}$

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

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

    
por 27.12.2010 / 17:32