Ir para conteúdo

POWERED BY:

Arquivado

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

Deejaybr

.htaccess (Url amigável)

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.