Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Erilton

[Resolvido] Expressão Regular Vs URL Amigável

Recommended Posts

Pessoal,

estou quase surtando... lá se vão 2h47 que tento resolver isso e tenho certeza que será uma coisa boba, rsrs

 

Estou com o wampserver instalado e habilitado o mod_rewite

O htaccess está funcionando corretamente.

 

Não sou nenhum expert em expressões regulares, por isso estou apanhando.

 

Situação:

Preciso remover a barra no final da URL, porém, sem a barra as expressões que eu testei não interpreta como eu preciso.

No index eu pego a variavél $x e faço uma busca no banco (index.php?x=palavra)

 

Colocando barra no final (localhost/teste/), funciona corretamente, recupero via $_GET['x'] e printo na tela "teste".

Agora se eu retirar a barra no final (localhost/teste) dá NOT Found The requested URL /teste/ was not found on this server.

Via .htaccess tentei de várias formas, até redirect para raiz, mas não deu certo.

 

Então vou deixar o que usei como padrão no início, com barra no final:

 

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(!.(\.gif|\.jpg|\.png|\.css|\.js|\.txt|\.php|\.htm|\.html)|.+[^/])$ /$1/ [L]

RewriteRule ^(.+)$   index.php?x=$1

 

Se alguém já passou por isso e/ou souber me ajuda, ficarei imensamente agradecido!

 

 

 

Até +!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também não sou expert, mas experimenta trocar suas duas RewriteRules's por:

 

RewriteRule !\.(js|ico|gif|jpg|png|css|txt|html|html)$ [NC]
RewriteRule (.*?)$ index.php?x=$1 [L]

 

Deixa eu tentar explicar.

 

Na primeira linha você define quais extensões devem ser ignoradas. Veja que fiz mais simples: Defini oponto literal uma vez e usei um grupo com vários condicionais.

 

Na segunda, toda requisição que não tenha caída na condição anterior é redirecionada para a index.php.

 

Se funcionar a contento, acredito que os responsáveis seja a flag NC (Next Condition), que vai filtrar a próxima condição, marcada como L (Last).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno Augusto, muito obrigado pela ajuda, mas infelizmente ainda não deu certo.

Isso aconteceu comigo em alguns dos testes que fiz, ele printa agora "index.php" como se fosse minha variável.

Tentei passar forçando a variável... pelo menos eu usaria substr, mas não deu certo.

 

Bom, agora ele entende sem a barra, mas a variável ele esta ignorando. :(

 

Tem mais alguma orientação?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno e pessoal, resolvido.

 

Apenas retirei os tramentos por arquivo, para ajudar outras pessoas que venham parar nesse post, segue correção que funcionou comigo:

 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$    index.php?x=$1

 

Lembrando que alguns servidores pode dar erro ao receber a variável vazia, sugestão é criar uma condição, se estiver vazio assume index.php, senão, executa ação.

 

Até +

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, mas você concorda comigo que não faz sentido

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.