Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia galera,
nossa.. faz tempo que não posto por aqui .. rsrs
Vamos lá, estou trabalhando com "URL Amigáveis" em um novo projeto e quando fui definir as regras do .htaccess surgiu um erro inesperado.
Basicamente a estrutura de Urls do site será a seguinte:
www.site.com.br/pagina -> aponta para: index.php?pg=pagina
Esta regra no arquivo .htaccess
Rewriterule ^([^/]+)\/?$ index.php?pg=$1
Acontece que ela já não funciona, quando testo na "index.php" imprimindo o que o $_GET me retorna ele exibe que o parâmetro "pg" retorna: index.php, veja:
Retorno GET: Array( [pg] => index.php )
Quando na verdade o que deveria retornar na variável PHP seria o "pagina" que vem logo depois da barra. /pagina
Se eu modificar esta regra para a seguinte:
Rewriterule ^([^/]+)\.html$ index.php?pg=$1
Então passa a funcionar, o $_GET me traz o "pagina" como valor do parâmetro "pg".
Outra situação:
RewriteRule ^([^/]+)\/([^/]+)\/?$ index.php?pg=$1&valor=$2
Essa regra funciona perfeitamente.
Basicamente o que eu preciso é que, ao acessar: www.site.com.br/pagina ele aponte para: index.php?pg=pagina e que ao acessar www.site.com.br/pagina/valor ele aponte para: index.php?pg=pagina&valor=valor
Qual o problema em minhas regras?
Abraços.
>
Tenta:
RewriteRule ^([0-9a-z-A-Z]?)/([0-9a-z-A-Z]?)$ index.php?pg=$1&valor=$2
Fiz uma pesquisa aqui e meu arquivo atual está da seguinte forma:
1 - Options FollowSymLinks
2 - RewriteEngine On
3 -
4 - RewriteCond %{REQUEST_FILENAME} !-f
5 - RewriteCond %{REQUEST_FILENAME} !-d
6 -
7 - RewriteRule ^([^/]+)/? index.php?pg=$1
8 - RewriteRule ^([^/]+)\/([^/]+)\/? index.php?pg=$1&valor=$2
Com esta regra, se eu acessar: www.site.com.br/pagina está funcionando, o parâmetro "pg" me retorna o valor "pagina".
Porém ao tentar acessar: www.site.com.br/pagina/valor não funciona, ele me retorna o array:
Array( [pg] => index.php [valor] => valor)
Ou seja, o 1º parâmetro não vem com o valor correto, este array deveria ser:
Array( [pg] => pagina [valor] =>valor)
Se eu remover a linha 8 do arquivo, ele está funcionando, ou seja, quando acesso: www.site.com.br/pagina ele está retornando o valor correto no parâmetro "pg".
Mas com a linha 8 fazendo uma sobrecarga na regra, ele está dando erro, quando acesso: www.site.com.br/pagina/valor ele está retornando os valores:
Array ( [pg] => index.php [valor] => valor )
Logo, se eu removo a linha 7, e deixo apenas a linha 8, o arquivo volta a funcionar me retornando os dados corretos quando acesso : www.site.com.br/pagina/valor
mas neste caso ao tentar acessar apenas: www.site.com.br/pagina ele me retorna página inexistente.
Portanto o que me parece é que a sobrecarga da regra é que está impedindo o funcionamento, como resolver isso? :D
Vlew
Bom, como não fiquei parado esperando uma solução consegui resolver o problema, pelo menos por enquanto.
Aqui no próprio imasters, encontrei um texto com exemplos de como trabalhar com URL Amigáveis, e um dos exemplos trazia uma regra que funcionou bem no meu caso.
Segue:
Options FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/])(/([^/])/?)?$ index.php?pg=$1&valor=$3 [L]
Com isso, posso definir a quantidade de parâmetros que quiser e utilizar em uma única regra que funciona perfeitamente.
Abs.
Moderador pode fechar o tópico.
Tenta: