Deejaybr 0 Denunciar post Postado Agosto 22, 2012 Boa noite amigos, Infelizmente não encontrei um material muito didático para começar a trabalhar com o .htaccess, no entanto, consegui com algumas pesquisas fazer o básico, que era ocultar a extensão *.php com o seguinte código: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ $1.php Mas ainda possuo outras regras para criar e não sei por onde partir. Possuo duas situações onde puxo dados de forma dinâmica e gostaria de uma ajuda para transcrever em url amigável. São elas: 1- <a href="produtos?categoria=<?php echo $Categorias[$i]['nome'] ?>&cod_categoria=<?php echo $Categorias[$i]['cod_categoria'] ?>"></a> 2 - <a href="interna?codProduto=<?php echo $Produtos[$j]['codProduto'] ?>&<?php echo $Produtos[$j]['nome'] ?>"> Gostaria de exibir somente os nomes na url, ocultando no primeiro caso o 'cod_categoria' e na segunda situação, tanto o termo codProduto quanto o id desse dado vindo do meu bd. Não sei se compliquei a explicação, mas não sei por onde partir. Se puderem me ajudar eu ficarei grato. Atenciosamente Compartilhar este post Link para o post Compartilhar em outros sites
ronal-gato 15 Denunciar post Postado Agosto 23, 2012 Coloque como fica o link completo ate usando o .php Por que não sei se eu estou certo mais se fosse acessar acessaria assim produtos.php?categoria=Notinia-puxada-do-banco&cod_categoria=id-da-noticia e a segunda ser assim interna.php?codProduto=id-do-produto&Aqui-nome-dinamico Se entendi certo tente assim RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/([0-9]+)/?$ produtos.php?categoria=$1&cod_categoria=$2 [NC,L] RewriteRule ^([0-9]+)/(.*)/?$ interna.php?codProduto=$1&$2 [NC,L] Lembrando essas partes estou supondo que você esta passando numeros caso não troque isso ([0-9]+) por isso (.*) cod_categoria=id-da-noticia codProduto=id-do-produto Compartilhar este post Link para o post Compartilhar em outros sites
Deejaybr 0 Denunciar post Postado Agosto 23, 2012 Muito obrigado pela luz Ronal! Então, minha Url fica assim: http://nomedosite.com.br/produtos.php?categoria=Agenda%20Empresa&cod_categoria=76 http://nomedosite.com.br/interna.php?codProduto=13123340&Percalux%20com%20Baixo%20Relevo Caso essa seja a forma correta mesmo, como eu deveria alterar no código para exibir nesse formato? edit: Não sei se é possível pelo htaccess, mas seria legal substituir os espaços por '-'. Tem como? Espero em breve poder ajudar as pessoas dessa forma também. O importante é estar Sempre Aprendendo, como você mesmo diz! =) Compartilhar este post Link para o post Compartilhar em outros sites
ronal-gato 15 Denunciar post Postado Agosto 23, 2012 Então eu entendi certo Caso essa seja a forma correta mesmo, como eu deveria alterar no código para exibir nesse formato? edit: Não sei se é possível pelo htaccess, mas seria legal substituir os espaços por '-'. Tem como? Isso se chama slug e tem que ser consertado na hora do cadastramento no banco de dados existe varios topicos de funções para isso Suas url irão ficar assim agora http://nomedosite.com.br/Agenda%20Empresa/76 http://nomedosite.com.br/13123340/Percalux%20com%20Baixo%20Relevo em vez de http://nomedosite.com.br/produtos.php?categoria=Agenda%20Empresa&cod_categoria=76 http://nomedosite.com.br/interna.php?codProduto=13123340&Percalux%20com%20Baixo%20Relevo Compartilhar este post Link para o post Compartilhar em outros sites
Deejaybr 0 Denunciar post Postado Agosto 23, 2012 CARA, FUNCIONOU! QUE SHOW! Aconteceu um problema, não sei se é normal, mas agora ele não consegue puxar os estilos e o JS ;/ Mas a url ficou perfeita e puxando corretamente o dado que queria. Compartilhar este post Link para o post Compartilhar em outros sites
ronal-gato 15 Denunciar post Postado Agosto 23, 2012 Tem que usar a tag base entre os heads assim <base href="www.seusite.com.br/" /> e utilizar o caminho completo tente assim Compartilhar este post Link para o post Compartilhar em outros sites
Deejaybr 0 Denunciar post Postado Agosto 23, 2012 Amigo, era isso mesmo! Não tenho nem palavras para agradecer o quanto estou aliviado por ter conseguido finalizar essa exigência do meu cliente. Graças a boa vontade que você dispôs. Espero poder lhe ajudar em algo algum dia também. Muito obrigado, Aos demais, fica ai a solução pra quem tem um problema parecido! Att, Fernando Costa Ronal, se eu tiver uma Url que utiliza toda a estrutura anterior e depois adiciona uma 'SubCategoria', como eu faria isso? Url Antiga: <a href="produtos.php?categoria.php=<?php echo $SubCategorias[$j]['nome'] ?>&cod_categoria=<?php echo $Categorias[$i]['cod_categoria'] ?>&codSubCategoria=<?php echo $SubCategorias[$j]['cod'] ?>&=<?php echo $SubCategorias[$j]['nome'] ?> O que eu fiz: <a href="http://site.com.br/<?php echo $Categorias[$i]['nome']."/".$Categorias[$i]['cod_categoria']."/".$SubCategorias[$j]['nome'] ?>"> E no htaccess: RewriteRule ^(.*)/([0-9]+)/?$ produtos.php?categoria=$1&cod_categoria=$2&=$3 [NC,L] No entanto não obtive sucesso. Será que minha falha está tão nítida assim? O Erro retornado é o de nº 500. Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Agosto 23, 2012 E no htaccess: RewriteRule ^(.*)/([0-9]+)/?$ produtos.php?categoria=$1&cod_categoria=$2&=$3 [NC,L] O Erro retornado é o de nº 500. Veja que você guarda dois valores entre os parênteses (.*) ([0-9]+) E tenta usar três: cod_categoria=$2&=$3 Certifique-se de que você sabe o que está fazendo ;) Compartilhar este post Link para o post Compartilhar em outros sites
Deejaybr 0 Denunciar post Postado Agosto 23, 2012 Veja que você guarda dois valores entre os parênteses (.*) ([0-9]+) E tenta usar três: cod_categoria=$2&=$3 Certifique-se de que você sabe o que está fazendo ;) Evandro, muito obrigado! Fui forçado a estudar melhor e entender como os parâmetros eram passados e cheguei a uma solução. Vou postar para ajudar alguém que possivelmente tenha a mesma dúvida: RewriteRule ^(.*)/([0-9]+)/([0-9]+)/(.*)/?$ produtos.php?categoria=$1&cod_categoria=$2&=$3&=$4 [NC,L] Compartilhar este post Link para o post Compartilhar em outros sites
Deejaybr 0 Denunciar post Postado Setembro 27, 2012 Fala galera, seguinte. Dentro de um projeto paralelo a esse tive o mesmo problema, mas mesmo com os exemplos antigos tive certa dificuldade, se alguém puder me ajudar ficarei grato! Eu tenho a seguinte URL: http://127.0.0.1/igrejabatista/detalheArtigo?id=1&titulo=Titulo%20Artigo%20do%20Silas&autor=Silas%20Malafaia E gostaria que ficasse assim: http://127.0.0.1/igrejabatista/detalheArtigo/titulo/autor Eu fiz o .htacces da seguinte forma: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ $1.php RewriteRule ^([a-z,0-9,A-Z,_-]+)/([a-z,0-9,A-Z,_-]+)/([a-z,0-9,A-Z,_-]+)/?$ detalheArtigo.php?id=$1&titulo=$2&autor=$3 [NC,L] e no <a href=""> eu coloquei: <a href="http://127.0.0.1/igrejabatista/detalheArtigo/<?php echo mysql_result($rs,$i,'titulo')."/".mysql_result($rs,$i,'nomeAutor') ?> Mas não deu certo ;/ Alguém sabe onde eu errei? Desde já agradeço! Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Setembro 28, 2012 Fala galera, seguinte. Dentro de um projeto paralelo a esse tive o mesmo problema, mas mesmo com os exemplos antigos tive certa dificuldade, se alguém puder me ajudar ficarei grato! Eu tenho a seguinte URL: http://127.0.0.1/igrejabatista/detalheArtigo?id=1&titulo=Titulo%20Artigo%20do%20Silas&autor=Silas%20Malafaia E gostaria que ficasse assim: http://127.0.0.1/igrejabatista/detalheArtigo/titulo/autor Eu fiz o .htacces da seguinte forma: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ $1.php RewriteRule ^([a-z,0-9,A-Z,_-]+)/([a-z,0-9,A-Z,_-]+)/([a-z,0-9,A-Z,_-]+)/?$ detalheArtigo.php?id=$1&titulo=$2&autor=$3 [NC,L] e no <a href=""> eu coloquei: <a href="http://127.0.0.1/igrejabatista/detalheArtigo/<?php echo mysql_result($rs,$i,'titulo')."/".mysql_result($rs,$i,'nomeAutor') ?> Mas não deu certo ;/ Alguém sabe onde eu errei? Desde já agradeço! Ainda há uma certa dificuldade com as regex por aqui. Primeiro, dentro de [grupos], não é necessário separar intervalos por vírgula. Você acaba, ao invés disso, adicionando a vírgula como caractere aceitável no grupo. Se você quiser casar textos alfanuméricos com [a-z,A-Z,0-9] vai ter um resultado inesperado quando a entrada for texto,nao,alfanumeric0 Pra tentar deixar mais claro, se você colocar vírgulas entre os colchetes, a vírgula também será um caractere aceito na regex. Segundo ponto: Veja RewriteRule ^(.*)$ $1.php Você ordena assim: Apache, pegue todo o endereço que você recebeu e adicione '.php' no final. Entrada http://127.0.0.1/igrejabatista/detalheArtigo/titulo/autor Saída http://127.0.0.1/igrejabatista/detalheArtigo/titulo/autor.php Na segunda regex, dentre outras coisas, você ordena isso aqui: 1. depois da segunda barra(/)2. de a a z ou vírgula ou de 0 a 9 ou vírgula ou de A a Z ou vírgula ou underscore ou hífen uma ou mais vezes 3. seguido ou não de uma barra(/) 4. e seja o fim, faça... Vamos ver se nossa entrada é verdadeira: Entrada http://127.0.0.1/igrejabatista/detalheArtigo/titulo/autor.php 1. depois da segunda barra http://127.0.0.1/igrejabatista/detalheArtigo/titulo/autor.php ------------------------------^1ª-----------^2ª-------------- Encontrei a segunda barra, o que temos que fazer agora?? Entrada titulo/autor.php 2. De a a z ou vírgula ou 0 a 9 ou vírgula ou de A a Z ou vírgula ou underscore ou hífen uma ou mais vezes titulo/autor.php xxxxxx^Não está na lista, paro por aqui e vou para o próximo passo 3. Seguido ou não de uma barra /autor.php ^Até aqui OK. próximo passo 4. E seja o fim autor.php ^Não é o fim! A expressão não casa, Apache, NÃO aplique a reescrita Compartilhar este post Link para o post Compartilhar em outros sites
Deejaybr 0 Denunciar post Postado Outubro 17, 2012 Desculpa e a demora pelo Feedback. Venho aqui agradecer a todos que me ajudaram nesse desafio, em especial o Evandro Oliveira que me fez entender melhor como funciona o rewrite. Tópico aprovado para quem tiver o mesmo tipo de dificuldade! Ainda há uma certa dificuldade com as regex por aqui. Primeiro, dentro de [grupos], não é necessário separar intervalos por vírgula. Você acaba, ao invés disso, adicionando a vírgula como caractere aceitável no grupo. Se você quiser casar textos alfanuméricos com [a-z,A-Z,0-9] vai ter um resultado inesperado quando a entrada for texto,nao,alfanumeric0 Pra tentar deixar mais claro, se você colocar vírgulas entre os colchetes, a vírgula também será um caractere aceito na regex. Segundo ponto: Veja RewriteRule ^(.*)$ $1.php Você ordena assim: Entrada http://127.0.0.1/igrejabatista/detalheArtigo/titulo/autor Saída http://127.0.0.1/igrejabatista/detalheArtigo/titulo/autor.php Na segunda regex, dentre outras coisas, você ordena isso aqui: Vamos ver se nossa entrada é verdadeira: Entrada http://127.0.0.1/igrejabatista/detalheArtigo/titulo/autor.php 1. depois da segunda barra http://127.0.0.1/igrejabatista/detalheArtigo/titulo/autor.php ------------------------------^1ª-----------^2ª-------------- Encontrei a segunda barra, o que temos que fazer agora?? Entrada titulo/autor.php 2. De a a z ou vírgula ou 0 a 9 ou vírgula ou de A a Z ou vírgula ou underscore ou hífen uma ou mais vezes titulo/autor.php xxxxxx^Não está na lista, paro por aqui e vou para o próximo passo 3. Seguido ou não de uma barra /autor.php ^Até aqui OK. próximo passo 4. E seja o fim autor.php ^Não é o fim! A expressão não casa, Apache, NÃO aplique a reescrita Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Outubro 17, 2012 apenas para deixar no meu conteudo para ver mais tarde :), pq estava com uns problemas com url amigavel. Compartilhar este post Link para o post Compartilhar em outros sites