Pessoal eu sei que existem um monte de tópicos sobre urls amigáveis, mais estou com uma dúvida simples.
É o seguinte, eu peguei um sistema que suas urls estão normal, e eu quero aplicar urls amigáveis nesse sistema. Minha pergunta é a seguinte:
Para cada link da página, eu tenho que definir uma ER no .htaccess que redirecione o usuário, ou tem uma outra forma de fazer isso sem ter que gerar uma ER para cada link da página?
Precisa Fazer Uma Er Para Cada Link?
Started By Diego Viana, 03/08/2008, 19:53
5 replies to this topic
#1
Posted 03/08/2008, 19:53
#2
Posted 03/08/2008, 21:29
Não precisar gerar uma regra, ER, para cada link não.
Tudo depende da sua necessidade.
No caso de ser um site simples, onde as querys não mudam (supondo-se que seja sempre, por examplo, index.php?secao=nome_secao) basta uma única linha no .htaccess para fazer todo o processo.
Vou dar um exemplo mais claro. Supondo-se que seu site tenha 4 seções, são elas:
-> Home
-> Compra
-> Venda
-> Contato
Todas estas seções, passam pela sua index.php, a qual faz os includes necessários e forma a página selecionada pelo user.
Sendo assim, ainda pegando o que eu citei lá em cima, para entrar dentro da seção Compra ficaria assim (sem URL amigável): index.php?secao=compra
Para cada seção, seguiria a mesma linha.
Neste caso, basta uma ER simples no .htaccess:
O $1 é chamado de retrovisor nas ERs, ele faz referência ao texto casado no primeiro grupo (isto é, a minha lista [a-z]).
Sendo assim, se o cara digitar:
compra: vai casar
venda: vai casar
contato: vai casar
123: não vai casar
Sempre que casar, vai pegar aquele texto digitado pelo user, e colocar na query de secao.
Deu para entender mais ou menos?
Tudo depende da sua necessidade.
No caso de ser um site simples, onde as querys não mudam (supondo-se que seja sempre, por examplo, index.php?secao=nome_secao) basta uma única linha no .htaccess para fazer todo o processo.
Vou dar um exemplo mais claro. Supondo-se que seu site tenha 4 seções, são elas:
-> Home
-> Compra
-> Venda
-> Contato
Todas estas seções, passam pela sua index.php, a qual faz os includes necessários e forma a página selecionada pelo user.
Sendo assim, ainda pegando o que eu citei lá em cima, para entrar dentro da seção Compra ficaria assim (sem URL amigável): index.php?secao=compra
Para cada seção, seguiria a mesma linha.
Neste caso, basta uma ER simples no .htaccess:
RewriteRule ^([a-z]+)\/?$ index.php?secao=$1
O $1 é chamado de retrovisor nas ERs, ele faz referência ao texto casado no primeiro grupo (isto é, a minha lista [a-z]).
Sendo assim, se o cara digitar:
compra: vai casar
venda: vai casar
contato: vai casar
123: não vai casar
Sempre que casar, vai pegar aquele texto digitado pelo user, e colocar na query de secao.
Deu para entender mais ou menos?
BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.
#3
Posted 03/08/2008, 21:58
Todas estas seções, passam pela sua index.php, a qual faz os includes necessários e forma a página selecionada pelo user.
legal kra, mais eu não entendi muito bem esta parte. Eu tenho que ter um $_GET['secao'] na index para saber qual é a seção e redirecionar o usuário?
#4
Posted 03/08/2008, 22:04
Você tem que ir por partes...
Desenvolva todo o sistema, sem URL's amigáveis.
Uma vez que você quer apenas uma ER, e no caso do site não ser muito complexo (digo isso para o caso de não ter uma seção que precisa fazer uma querystring diferenciada das demais), o meio mais comum de se fazer é definindo a index.php como a página que vai ser responsável pelo resgate dos includes, isto é, as partses de cada respectiva seção.
Você faz normalmente, como sabe fazer o sistema. O mod_rewrite faz apenas é um redirecionamento.
Ou seja...
Quando o cara digitar http://www.site.com.br/venda/ vai redicionar (internamente, sem o usuário saber) para http://www.site.com.br/index.php?secao=venda, sacou?!
Sendo assim, sim, o tratamento você faz usando os meios normais, $_GET['secao'] e afins.
Aos olhos do teu código PHP, nada vai mudar. Não te engana com o que tá escrito lá na barra de endereços. Aquilo é só um alias, um apelido.
Desenvolva todo o sistema, sem URL's amigáveis.
Uma vez que você quer apenas uma ER, e no caso do site não ser muito complexo (digo isso para o caso de não ter uma seção que precisa fazer uma querystring diferenciada das demais), o meio mais comum de se fazer é definindo a index.php como a página que vai ser responsável pelo resgate dos includes, isto é, as partses de cada respectiva seção.
Você faz normalmente, como sabe fazer o sistema. O mod_rewrite faz apenas é um redirecionamento.
Ou seja...
Quando o cara digitar http://www.site.com.br/venda/ vai redicionar (internamente, sem o usuário saber) para http://www.site.com.br/index.php?secao=venda, sacou?!
Sendo assim, sim, o tratamento você faz usando os meios normais, $_GET['secao'] e afins.
Aos olhos do teu código PHP, nada vai mudar. Não te engana com o que tá escrito lá na barra de endereços. Aquilo é só um alias, um apelido.
BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.
#5
Posted 03/08/2008, 22:40
Então, neste exemplo acima que vc deu, caso eu tenha as páginas, venda.php, compra.php e contato.php, supondo que eu tenha um menu com esses links:
VENDA -> <a href="/venda/">VENDA</a>
COMPRA -> <a href="/compra/">COMPRA</a>
CONTATO -> <a href="/contato/">CONTATO</a>
aí no .htaccess eu deixo assim:
RewriteRule ^([a-z]+)\/?$ index.php?secao=$1
e na index.php
É isso mesmo?
VENDA -> <a href="/venda/">VENDA</a>
COMPRA -> <a href="/compra/">COMPRA</a>
CONTATO -> <a href="/contato/">CONTATO</a>
aí no .htaccess eu deixo assim:
RewriteRule ^([a-z]+)\/?$ index.php?secao=$1
e na index.php
if($_GET['secao'] == "venda"){ header("Location: venda.php"); } // e assim para todos
É isso mesmo?
#6
Posted 04/08/2008, 08:34
Cara, location é para redirecionar. Se você quer fazer assim, não tem necessidade mod_rewrite.
Vamos supor que você tem essa estrutura:
- index.php
- vender.php
- comprar.php
- contato.php
- home.php
- menu.php
- rodape.php
E a index é a página responsável por essa montagem (neste exemplo). Sendo assim, a index tem lá...
Não tem nada de redirect e afins... É normalzão a página mesmo. Este código acima não é a melhor forma de se fazer essa validação, coloquei apenas como exemplo, para que tu possa entender como o mod_rewrite funciona (neste meu exemplo).
Vamos supor que você tem essa estrutura:
- index.php
- vender.php
- comprar.php
- contato.php
- home.php
- menu.php
- rodape.php
E a index é a página responsável por essa montagem (neste exemplo). Sendo assim, a index tem lá...
<html> <?php require('cabecalho.php'); ?> <body> <?php if ($_GET['secao']) { require($_GET['secao'].'.php'); } else { require('home.php'); } require('rodape.php'); ?> </body> </html>
Não tem nada de redirect e afins... É normalzão a página mesmo. Este código acima não é a melhor forma de se fazer essa validação, coloquei apenas como exemplo, para que tu possa entender como o mod_rewrite funciona (neste meu exemplo).
BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)