Ir para conteúdo

POWERED BY:

Arquivado

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

paladino_php

[Resolvido] Htacces não reconhece regra de reescrita

Recommended Posts

Pessoal, olha só isso, não consigo passar essa regra para o meu .htaccess:

 

<ifModule mod_rewrite.c>

RewriteEngine On

RewriteRule ^produtos/([a-z])/([a-z-]+)/?$ /produtos.php?secao=$1&nome=$2

</ifModule>

 

tem algo errado?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

apresenta algum erro?

 

verificou o log de erros do apache ?

 

a instrução diz:

 

<ifModule mod_rewrite.c>

 

se o módulo rewrite estiver habilitado, então execute...

 

 

portanto, verifique se o mode_rewrite está ativado no apache.

 

veja também:

 

http://forum.imasters.com.br/topic/469674-problema-com-url-amigaveis/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o hinom disse, é bom verificar se há algum erro no log e ter certeza de que o módulo 'rewrite' está habilitado.

 

-

 

Pela sua regra, a variável 'secao' tem apenas uma letra, é isso mesmo?

 

Ela casa, por exemplo:

produtos/a/abacate/

 

 

É bom colocar a flag [L] no final da regra ou o Apache continuará processando o arquivo htaccess em busca de novas regras e no final a única que irá valer será a última. Com a flag L - Last, você impede isso. Pode ser que esteja acontecendo isso também...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente colocar um codigo que não existe no .htaccess se ele der a pagina NOT FOUND o .htaccess esta funcionando caso

o contrario

Verifique se digitou o .htaccess corretamente e olhe se ele esta sem extensão por que geralmente ele e criado pelo bloco de notas e tem gente que esquece de retirar a extensão .txt do bloco de notas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelas respostas, respondendo as questões:

 

- O módulo está funcionando, esse trecho do código me diz isso

RewriteRule index index.php

;

- mangakh, vacilei ai nessa parte, alterei a linha ficando assim

RewriteRule ^produtos/(.*)/([a-z-]+)/?$ produtos.php?secao=$1&nome=$2 [NC,L]

, aproveitando a dica adicionei os flags no final da regra;

- retirei a barra antes do produto

 

conclusão: a url não é reescrita, já to put** da vida com esse código. Porque pela lógica não tem nada errado.

Vou postar todo o arquivo pra vocês verem como esta:

 

<ifModule mod_rewrite.c>

RewriteEngine On

RewriteRule index index.php
RewriteRule quem-somos quem-somos.php
RewriteRule termos-de-uso termos-de-uso.php
RewriteRule contato contato.php
RewriteRule produtos produtos.php

RewriteRule ^produtos/(.*)/([a-z-]+)/?$ produtos.php?secao=$1&nome=$2 [NC,L]

</ifModule>

Compartilhar este post


Link para o post
Compartilhar em outros sites
<ifModule mod_rewrite.c>

       RewriteEngine On

       RewriteRule ^produtos/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ /produtos.php?secao=$1&nome=$2

</ifModule>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

RewriteRule ^index/?$ index.php [NC,L]
RewriteRule ^quem-somos/?$ quem-somos.php [NC,L]
RewriteRule ^termos-de-uso/?$ termos-de-uso.php [NC,L]
RewriteRule ^contato/?$ contato.php [NC,L]
RewriteRule ^produtos/?$ produtos.php [NC,L]

RewriteRule ^produtos/([a-z0-9-]+)/([a-z0-9-]+)/?$ produtos.php?secao=$1&nome=$2 [NC,L]

 

se nao funcionar agora, tem coisa errada no seu GET dos parametros. hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

O seu .htaccess estava errado, com o código abaixo deve funcionar.

 

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d

RewriteRule ^index/?$ index.php [NC,L]
RewriteRule ^quem-somos/?$ quem-somos.php [NC,L]
RewriteRule ^termos-de-uso/?$ termos-de-uso.php [NC,L]
RewriteRule ^contato/?$ contato.php [NC,L]
RewriteRule ^produtos/?$ produtos.php [NC,L]

RewriteRule ^produtos/([a-z0-9-]+)/([a-z0-9-]+)/?$ produtos.php?secao=$1&nome=$2 [NC,L]

 

Eu criei um tópico aqui no fórum sobre URL`s amigáveis, veja.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Wanderson Valerio li seu tópico, bem interessante. Principalmente pra quem está aprendendo, assim como eu. Reescrevi as regras conforme você disse, porém ainda não funciona. Exceto para as outras páginas, que as regras se aplicam sem problema nenhum.

 

Vou dividir por partes pra que possamos tentar chegar a uma solução que poderá vir a ajudar outros com o mesmo problema futuramente:

 

RewriteRule ^produtos/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ /produtos.php?secao=$1&nome=$2

RewriteRule Inicio da regra de reescrita

^produtos/ A nova url deverá começar com a palavra produtos seguida de uma '/'

([a-zA-Z0-9-]+) Expressão regular que irá validar tanto letras de a-z minúsculas, letras A-Z maiúsculas ou números de 0-9 ou um hífem, sendo mais de um, certo?

O mesmo para a segunda expressão;

Termina a url com uma barra ou não (opcional).

 

/produtos.php?secao=$1&nome=$2 A url original, para onde o Apache irá apontar 'por baixo dos panos' a url virtual. Onde $1 receberá o valor atribuido a expressão dentro dos primeiros parênteses e $2 receberá a dos segundos parênteses. Espeero que esteja certo :P

 

Acredito que esteja tudo dentro dos conformes. Teria alguma outra coisa que eu precise testar para saber onde está o erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz aqui e também não dá certo da forma como está fazendo.

 

Eu tomei a liberdade de fazer uma alteração e aqui funcionou perfeitamente:

 

Remova a sua regra

RewriteRule ^produtos/?$ produtos.php [NC,L]

 

Regra

RewriteRule ^produtos(?:/([a-zA-Z0-9-]+)(?:/([a-zA-Z0-9-]+))?)?/?$ /produtos.php?secao=$1&nome=$2 [L]

 

Casa

/produtos

/produtos/a

/produtos/a/abacate

 

Você deve verificar se os parâmetros foram passados da seguinte forma (usando 'empty' ao invés de 'isset'):

$secao = "(default)";
if (!empty($_GET['secao'])) {
  $secao = $_GET['secao'];
}

$nome = "(default)";
if (!empty($_GET['nome'])) {
  $nome = $_GET['nome'];
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, como você fez? rs

 

Aqui não pegou. A url não muda fica : index/produtos?secao=jogos&nome=rpg e tirando a primeira regra, da erro 404, por causa do .php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, como você fez? rs

 

Aqui não pegou. A url não muda fica : index/produtos?secao=jogos&nome=rpg e tirando a primeira regra, da erro 404, por causa do .php.

 

Então... fiz algumas alterações.

 

Retire a regra

RewriteRule ^produtos/?$ produtos.php [NC,L]

 

Adicione a regra

RewriteRule ^produtos(?:/([0-9a-z\-]+)(?:/([0-9a-z\-]+))?)?/?$ /produtos.php?secao=$1&nome=$2 [L]

 

Acesse

seu-site.com/produtos

seu-site.com/produtos/jogos

seu-site.com/produtos/jogos/rpg

 

E tudo será redirecionado para produtos.php. Pelo menos foi o que aconteceu aqui...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então eu não passo os parâmetros apenas os valores, seria isso:

 

<a href="produtos/subcategoria/'.$nome_produto.'"> ' . $nome_produto . '</a>

 

Exatamente, você deve fazer dessa forma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que coisa, aqui a regra não funciona. Nem mesmo para a página produtos. Vou tentando modificar algumas coisas pra ver se consigo alguma evolução.

 

Ah pode crer, uma coisa, os parâmetros não estão sendo passados via GET para a url.

Pelo teste que o mangakah sugeriu

 

$secao = "(default)";
if (!empty($_GET['secao'])) {
  $secao = $_GET['secao'];
}

$nome = "(default)";
if (!empty($_GET['nome'])) {
  $nome = $_GET['nome'];
}

echo $secao . ' - '. $nome;

 

O retorno é (default) - (default)

Compartilhar este post


Link para o post
Compartilhar em outros sites

paladino_php

Como você esta consultando ao banco para buscar se existe mesmo a categoria e o nome do produto que o usuario esta buscando na url

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então ronal-gato, as categorias já são pré selecionada, em um menu. Você tem apenas que clicar nelas para ser redirecionado para a página da categoria correspondente. Deu pra entender rs

Não dá pra você ir direto para uma categoria com um produto especifico, a não ser que você saiba o endereço exato da URL, o que eu acho bem improvável que aconteça.

 

O link que postei antes já te coloca na página do produto. Se ele n existir nem mesmo é exibido no menu :)

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.