Jump to content


Photo

Rewriterule Com Parâmetro Opcional


  • Faça o login para participar
Nenhuma resposta neste tópico

#1 --Ludson--

--Ludson--

    Novato no fórum

  • Usuários
  • 7 posts
  • Sexo:Não informado

Posted 01/04/2009, 13:55

Salve salve,
Vamos lá.. é bem confuso!

Tenho um arquivo .htaccess na pasta raiz do meu site.
com a seguinte regra:

RewriteRule ^([^/]+)\.html$ index.php?pagina=$1

Esta regra está funcionando perfeitamente, quando acesso: http://www.meusite.c...uer_pagina.html ele redireciona para: index.php?pagina=qualquer_pagina

com essa regra, se eu acessar: http://www.meusite.com.br/ vai para index com o parametro vazio, eu trato isso e blz.. está funcionando como eu quero.

Agora preciso de um parâmetro opcional, preciso que: se o usuário digitar: http://www.meusite.c.../qualquercoisa/ (com ou sem a barra no final) ele redirecione para: index.php?membro=qualquercoisa.
E se o usuário digitar: www.meusite.com.br/qualquercoisa/umapagina.html ele redirecione para: index.php?membro=qualquercoisa&pagina=umapagina

Tentei utiliza a seguinte regra:
RewriteRule ^(([^/]+))?(/([^/]+)\.html)?$ index.php?membro=$1&pagina=$2

Ou seja, o primeiro e o segundo parâmetros são opcionais.
quando tento acessar a url: http://localhost/primeiro/segundo.html

e na index fiz um debug: print_r($_GET) ou seja, imprimo tudo que veio de parâmetro.

O resultado do debug é:
Array ( [membro] => index.php [pagina] => index.php )

Ou seja, está ignorando os 2 parâmetros passados, o resultado correto deveria ser:
Array ( [membro] => primeiro [pagina] => segundo )

Se eu acesso: http://localhost/primeiro
o resultado do debug é:
Array ( [membro] => index.php [pagina] => index.php )

e se eu acesso: http://localhost/primeiro/
Dá página não encontrada.

Resumindo tudo, preciso que:

Ao acessar a página: http://localhost/primeiro redirecione para: http://localhost/ind...membro=primeiro
Ao acessar a página: http://localhost/primeiro/ redirecione para: http://localhost/ind...membro=primeiro
Ao acessar a página: http://localhost/primeiro/segundo.html redirecione para: http://localhost/ind...;pagina=segundo
Ao acessar a página: http://localhost/segundo.html redirecione para: http://localhost/ind...&pagina=segundo

Deu pra entender a confusão?

Procurei muito mas não consegui fazer funcionar :blink:
Obrigado pela ajuda.

Resolvi o problema criando três regras.

#Primeira: Caso a URL seja: http://localhost/mysite/anything ou http://localhost/mysite/anything/
RewriteRule ^([^/.]+)/?$ index.php?membro=$1

#Segunda: Caso a URL seja: http://localhost/mysite/page.html
RewriteRule ^([^/]+)\.html$ index.php?pagina=$1

#Terceira: Caso a Url seja: http://localhost/mysite/anything/page.html
RewriteRule ^([^/.]+)/([^/]+)\.html$ index.php?membro=$1&pagina=$2

A única coisa que mudou da regra que eu mesmo tinha criado e informado na criação do tópico, é que no caso da primeira e terceira regra, no parâmetro $1 tem um ponto depois da barra.

O que este ponto modifica na regra? Sem o ponto, era passado o nome da página como parâmetro (membro=index.php) agora, quando coloco o ponto, os parâmetros são passados corretamente. Coloquei o ponto somente na Primeira Regra, e no primeiro parâmetro da Terceira regra.

Gostaria de saber o que mudou, qual é o efeito do "." na regra apenas para aprender melhor.

Obrigado pela Ajuda, e fica ai o tópico para que mais alguém possa ser ajudado.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq