Ir para conteúdo

POWERED BY:

Arquivado

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

David Borges

[Resolvido] .htaccess com mais de um parâmetro

Recommended Posts

Olá pessoal, estou estudando expressões regulares e testando.

 

Estou utilizando o seguinte código no .htaccess:

 

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\/(.*)\/?$ evento.php?evento=$1&etapa=$2

 

Funciona legal quando digito "www.site.com.br/nome-do-evento/etapa-do-evento", porém o usuário também pode digitar apenas o nome do evento, "www.site.com.br/nome-do-evento", ou seja, não exibiria nenhuma etapa específica, mas sim o conteúdo completo e tal.

 

Com a expressão regular que tenho hoje, o problema é que digitando apenas "www.site.com.br/nome-do-evento" recebo erro dizendo que a página não existe, mas se eu digitar "www.site.com.br/nome-do-evento/" (com a barra no final) funciona certinho.

 

Como faço para não ter a obrigatoriedade dessa BARRA logo após o "nome-do-evento"?

 

Obrigado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente fazer expressões para páginas individuais, somente para testes. Ou seja, em vez de criar uma ER para todas, crie individuais. Assim conseguirá isolar o erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

deixe opcional:

 

RewriteRule ^(.*)\/?(.*)\/?$ evento.php?evento=$1&etapa=$2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Wilian, estamos no caminho rsrs... mas utilizando sua ER acontece o seguinte:

 

Quando digito:

www.site.com.br/nome-do-evento

Okk! Funciona do jeito que preciso! A variável $1 é apresentada. A variável $2 não, pois está vazia.

 

Quando digito:

www.site.com.br/nome-do-evento/etapa-do-evento (ou)

www.site.com.br/nome-do-evento/etapa-do-evento/

Não funciona. Ele traz apenas a variável $1, a variável $2 não.

Inclusive a variável $1 retorna "nome-do-evento/etapa-do-evento", ou seja, ele não está separando a variável $1 e a $2.

 

Obrigado pela ajuda mais uma vez!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, isso é pq a sua ER está muito gulosa:

 

RewriteRule ^([a-z0-9-]+)\/?([a-z0-9-]+)?\/?$ evento.php?evento=$1&etapa=$2

ou:

 

RewriteRule ^([^\/]+)\/?([^\/]+)?\/?$ evento.php?evento=$1&etapa=$2

dá uma testada e estudada em ERs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boaaaaaa!! Perfeito Willian!

 

Então, ([a-z0-9-]+) permite tudo, menos a barra, certo? Assim a barra volta a fazer a divisão das variáveis? correto?

 

Dúvida simples, qual o papel do "+" nisso tudo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

a-z casa com letras minusculas de a até z

0-9 casa com numeros de 0 até 9

- casa com o -

+ é um quantificador "tem que ter". Casa com 1 ou mais de 1.

 

logo, [a-z0-9-]+

casa com letras, numeros, hifens, em uma ou mais quantidades.

 

 

O seu problema inicial, era que o ponto . é um curinga que casa tudo.

Então .* estava casando tudo(guloso), até a barra. Por isso que a primeira variavel recebia a barra e o que era para ser o valor da segunda.

 

 

O que eu fiz, foi deixar menos guloso, e não casar a barra.

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.