Jump to content


Photo

Precisa Fazer Uma Er Para Cada Link?


  • Faça o login para participar
5 replies to this topic

#1 Diego Viana

Diego Viana

    Normal

  • Usuários
  • 84 posts
  • Sexo:Masculino
  • Localidade:Ourinhos-SP

Posted 03/08/2008, 19:53

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?

#2 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

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:

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.

#3 Diego Viana

Diego Viana

    Normal

  • Usuários
  • 84 posts
  • Sexo:Masculino
  • Localidade:Ourinhos-SP

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 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

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.
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.

#5 Diego Viana

Diego Viana

    Normal

  • Usuários
  • 84 posts
  • Sexo:Masculino
  • Localidade:Ourinhos-SP

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
if($_GET['secao'] == "venda"){
   header("Location: venda.php");
}

// e assim para todos

É isso mesmo?

#6 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

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á...

<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.




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq