Jump to content


Photo

Migrando Para Urls Amigáveis


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

#16 Red Hot

Red Hot

    12 Horas

  • Usuários
  • 168 posts
  • Sexo:Masculino
  • Localidade:Minas Gerais

Posted 18/02/2006, 16:54

Quando tiver um tmpo livre vou postar um novo modo de fazer estas modificações com pouco trabalho para sites já construidos.
É o modo que utilizo na galeria de imagens do meu site. Pois não fique editando arquivo por arquivo do coppermine!
Link na assinatura!

#17 userwm

userwm

    Turista

  • Usuários
  • 57 posts
  • Sexo:Não informado

Posted 21/02/2006, 21:09

muito bom o tutorial, parabéns!

#18 klango

klango

    Aqui é das antigas

  • Usuários
  • 1013 posts
  • Sexo:Não informado
  • Localidade:Anápolis-GO em breve na glória com meu Deus.
  • Interesses:Cristo Jesus - Familia - Música - Internet e multimidia - Carros antigos.

Posted 22/02/2006, 08:20

Red Hot posta ai o tuto então mano, será muito útil blz?



t+
VIVA COM SAÚDE - NUTRI CENTER SUPLEMENTOS

.:: Nutri Center Suplementos Alimentares ::.
Loja de Suplementos Alimentares pelo Menor Preço do País. Compre já Suplementos Alimentares: Whey Protein, Albumina, BCAA, Maltodextrina, Creatina, Aminoácidos, Vitaminas, Diets, Ligth, celíacos, Perca peso rapido, Nutri Center Suplementos, sua loja de Suplementos Alimentares em Anápolis - GO e na Internet. 62-3702-7789

#19 Red Hot

Red Hot

    12 Horas

  • Usuários
  • 168 posts
  • Sexo:Masculino
  • Localidade:Minas Gerais

Posted 26/02/2006, 21:44

Vou falar só o básico mas depois coloco um tutorial. Pode ser que tenham erros, pois estou sem tempo, mas tentem seguir a lógica do sistema!

Primeiro você cria um arquivo .htaccess e coloca o conteúdo nele de acordo com os links da sua página.
Exemplo:
Para materia.php?id=125 e categoria?cat=teste

RewriteRule ^materia([0-9]*).html$ materia.php?id=$1 [L]
RewriteRule ^categoria-([a-z]*).html$ categoria.php?cat=$1 [L]

Depois você adiciona em um arquivo que está incluido no topo de todas as páginas!
o conteúdo:

ob_start();//Armazena o conteúdo da página em um buffer

function replace_for_mod_rewrite(&$s) { //Função para substituir links
$urlin = array(
"'(?<!/)materia.php\?id=([0-9]*)\"'",
"'(?<!/)categoria.php\?cat=([a-z]*)\"'"
);

$urlout = array(
"materia\\1.html\"",
"categoria-\\1.html\""
);

$s = preg_replace($urlin, $urlout, $s);
return $s;
}


Depois você adiciona em um arquivo que está incluido no fim de todas as páginas!
o conteúdo:
$conteudo = ob_get_contents(); //Armazena o conteúdo do buffer na variavel $conteudo
ob_end_clean(); //Limpa buffer
echo replace_for_mod_rewrite($conteudo); //Muda os links materia.php?id=125 para materia125.html e o mesmo com categoria.php?cat=teste para categoria-teste.html

A utilidade deste sistema é que você não precisa alterar o conteúdo das páginas e se substituir a linha
echo replace_for_mod_rewrite($conteudo);
por
echo "$conteudo";
O site volta aos links convencionais.
Portanto é mais útil para quem já possui um site com muitas páginas no ar!

#20 Iron-Maiden

Iron-Maiden

    12 Horas

  • Usuários
  • 231 posts
  • Sexo:Não informado

Posted 02/05/2006, 03:00

Vou falar só o básico mas depois coloco um tutorial. Pode ser que tenham erros, pois estou sem tempo, mas tentem seguir a lógica do sistema!

Primeiro você cria um arquivo .htaccess e coloca o conteúdo nele de acordo com os links da sua página.
Exemplo:
Para materia.php?id=125 e categoria?cat=teste

RewriteRule ^materia([0-9]*).html$ materia.php?id=$1 [L]
RewriteRule ^categoria-([a-z]*).html$ categoria.php?cat=$1 [L]

Depois você adiciona em um arquivo que está incluido no topo de todas as páginas!
o conteúdo:

ob_start();//Armazena o conteúdo da página em um buffer

function replace_for_mod_rewrite(&$s) { //Função para substituir links
$urlin = array(
"'(?<!/)materia.php\?id=([0-9]*)\"'",
"'(?<!/)categoria.php\?cat=([a-z]*)\"'"
);

$urlout = array(
"materia\\1.html\"",
"categoria-\\1.html\""
);

$s = preg_replace($urlin, $urlout, $s);
return $s;
}


Depois você adiciona em um arquivo que está incluido no fim de todas as páginas!
o conteúdo:
$conteudo = ob_get_contents(); //Armazena o conteúdo do buffer na variavel $conteudo
ob_end_clean(); //Limpa buffer
echo replace_for_mod_rewrite($conteudo); //Muda os links materia.php?id=125 para materia125.html e o mesmo com categoria.php?cat=teste para categoria-teste.html

A utilidade deste sistema é que você não precisa alterar o conteúdo das páginas e se substituir a linha
echo replace_for_mod_rewrite($conteudo);
por
echo "$conteudo";
O site volta aos links convencionais.
Portanto é mais útil para quem já possui um site com muitas páginas no ar!



e no caso de ter uma url grande, como ficaria?

site.com/index.php?categoria=21&subcategoria_cat_add=5

obrigado!

#21 leanjo

leanjo

    Doutor

  • Usuários
  • 912 posts
  • Sexo:Não informado
  • Interesses:...

Posted 16/06/2006, 01:37

testei no meu site e deu erro no IIS

o que pode ser?

#22 Bruno Augusto

Bruno Augusto

    ∙•● Restarting... ●•∙

  • Usuários
  • 1968 posts
  • Sexo:Não informado
  • Localidade:Itajubá

Posted 16/06/2006, 09:15

Nossa é um tópico meio velho mas já que reergueam ele, vou aproveitar a deixa e tentar fazer funcionar esse treco no meu sistema de banners.

Assim, eu tenho um switch megalomaníaco pendurado na index.php que, em cada case, abre um .tpl do Smarty diferente.
Nesse meu caso como que faria? A propósito, vejam o monstro que tá:

<?php

//------------------
// Template
//------------------

switch( @$_GET['act'] )
{
	case "help":
	$Smarty	->	assign('MAIN', $MENU['MAIN']);
	$OUTPUT	=	$Smarty->fetch('help.tpl');
	print "$OUTPUT";
	break;

	case "updates":
	$Smarty	->	assign('MAIN', $MENU['MAIN']);
	$OUTPUT	=	$Smarty->fetch('updates.tpl');
	print "$OUTPUT";
	break;

	case "report":
		switch( @$_GET['section'] )
		{
			case "stats":
				switch( @$_GET['opt'] )
				{
					case "advertisers":
					$Smarty	->	assign('MAIN', $MENU['REPORT']);
					$OUTPUT	=	$Smarty->fetch('report/stats/advertisers.tpl');
					print "$OUTPUT";
					break;
					
					case "campaigns":
					$Smarty	->	assign('MAIN', $MENU['REPORT']);
					$OUTPUT	=	$Smarty->fetch('report/stats/campaigns.tpl');
					print "$OUTPUT";
					break;
					
					case "zones":
					$Smarty	->	assign('MAIN', $MENU['REPORT']);
					$OUTPUT	=	$Smarty->fetch('report/stats/zones.tpl');
					print "$OUTPUT";
					break;
					
					case "paycheck":
					$Smarty	->	assign('MAIN', $MENU['REPORT']);
					$OUTPUT	=	$Smarty->fetch('report/stats/paycheck.tpl');
					print "$OUTPUT";
					break;
					
					case "history":
					$Smarty	->	assign('MAIN', $MENU['REPORT']);
					$OUTPUT	=	$Smarty->fetch('report/stats/history.tpl');
					print "$OUTPUT";
					break;
					
					default:
					$Smarty	->	assign('MAIN', $MENU['REPORT']);
					$OUTPUT	=	$Smarty->fetch('report/stats/idx.tpl');
					print "$OUTPUT";
					break;
				}
			break;
			
			case "export":
				switch( @$_GET['opt'] )
				{
					case "advertisers":
					$Smarty	->	assign('MAIN', $MENU['REPORT']);
					$OUTPUT	=	$Smarty->fetch('report/export/advertisers.tpl');
					print "$OUTPUT";
					break;
					
					case "zones":
					$Smarty	->	assign('MAIN', $MENU['REPORT']);
					$OUTPUT	=	$Smarty->fetch('report/export/zones.tpl');
					print "$OUTPUT";
					break;
					
					case "paycheck":
					$Smarty	->	assign('MAIN', $MENU['REPORT']);
					$OUTPUT	=	$Smarty->fetch('report/export/paycheck.tpl');
					print "$OUTPUT";
					break;
					
					case "history":
					$Smarty	->	assign('MAIN', $MENU['REPORT']);
					$OUTPUT	=	$Smarty->fetch('report/export/history.tpl');
					print "$OUTPUT";
					break;
					
					default:
					$Smarty	->	assign('MAIN', $MENU['REPORT']);
					$OUTPUT	=	$Smarty->fetch('report/export/idx.tpl');
					print "$OUTPUT";
					break;
				}
			break;
			
			default:
			$Smarty	->	assign('MAIN', $MENU['REPORT']);
			$OUTPUT	=	$Smarty->fetch('report/idx.tpl');
			print "$OUTPUT";
			break;
		}
	break;
	
	default:
	$Smarty	->	assign('MAIN', $MENU['REPORT']);
	$OUTPUT	=	$Smarty->fetch('report/idx.tpl');
	print "$OUTPUT";
	break;

	case "paycheck":
		switch( @$_GET['section'] )
		{
			case "comissions":
			$Smarty	->	assign('MAIN', $MENU['PAYCHECK']);
			$OUTPUT	=	$Smarty->fetch('paycheck/comissions.tpl');
			print "$OUTPUT";
			break;
			
			case "recurring":
			$Smarty	->	assign('MAIN', $MENU['PAYCHECK']);
			$OUTPUT	=	$Smarty->fetch('paycheck/recurring.tpl');
			print "$OUTPUT";
			break;
			
			case "payments":
			$Smarty	->	assign('MAIN', $MENU['PAYCHECK']);
			$OUTPUT	=	$Smarty->fetch('paycheck/payments.tpl');
			print "$OUTPUT";
			break;
			
			case "history":
			$Smarty	->	assign('MAIN', $MENU['PAYCHECK']);
			$OUTPUT	=	$Smarty->fetch('paycheck/history.tpl');
			print "$OUTPUT";
			break;
			
			default:
			$Smarty	->	assign('MAIN', $MENU['PAYCHECK']);
			$OUTPUT	=	$Smarty->fetch('paycheck/idx.tpl');
			print "$OUTPUT";
			break;
		}
	break;

	case "manager":
		switch( @$_GET['section'] )
		{
			case "advertisers":
				switch( @$_GET['opt'] )
				{
					case "add":
					$Smarty	->	assign('MAIN', $MENU['MANAGER']);
					$OUTPUT	=	$Smarty->fetch('manager/advertisers/add.tpl');
					print "$OUTPUT";
					break;
					
					default:
					$Smarty	->	assign('MAIN', $MENU['MANAGER']);
					$OUTPUT	=	$Smarty->fetch('manager/advertisers/idx.tpl');
					print "$OUTPUT";
					break;
				}
			break;
			
			case "campaigns":
				switch( @$_GET['opt'] )
				{
					case "add":
					$Smarty	->	assign('MAIN', $MENU['MANAGER']);
					$OUTPUT	=	$Smarty->fetch('manager/campaigns/add.tpl');
					print "$OUTPUT";
					break;
					
					default:
					$Smarty	->	assign('MAIN', $MENU['MANAGER']);
					$OUTPUT	=	$Smarty->fetch('manager/campaigns/idx.tpl');
					print "$OUTPUT";
					break;
				}
			break;
			
			case "zones":
				switch( @$_GET['opt'] )
				{
					case "add":
					$Smarty	->	assign('MAIN', $MENU['MANAGER']);
					$OUTPUT	=	$Smarty->fetch('manager/zones/add.tpl');
					print "$OUTPUT";
					break;
					
					default:
					$Smarty	->	assign('MAIN', $MENU['MANAGER']);
					$OUTPUT	=	$Smarty->fetch('manager/zones/idx.tpl');
					print "$OUTPUT";
					break;
				}
			break;
			
			case "codes":
			$Smarty	->	assign('MAIN', $MENU['MANAGER']);
			$OUTPUT	=	$Smarty->fetch('manager/codes.tpl');
			print "$OUTPUT";
			break;
			
			default:
			$Smarty	->	assign('MAIN', $MENU['MANAGER']);
			$OUTPUT	=	$Smarty->fetch('manager/idx.tpl');
			print "$OUTPUT";
			break;
		}
	break;
			
	case "mail":
		switch( @$_GET['section'] )
		{
			case "manager":
			$Smarty	->	assign('MAIN', $MENU['MAIL']);
			$OUTPUT	=	$Smarty->fetch('mail/manager.tpl');
			print "$OUTPUT";
			break;
			
			case "create":
			$Smarty	->	assign('MAIN', $MENU['MAIL']);
			$OUTPUT	=	$Smarty->fetch('mail/create.tpl');
			print "$OUTPUT";
			break;

			case "send":
			$Smarty	->	assign('MAIN', $MENU['MAIL']);
			$OUTPUT	=	$Smarty->fetch('mail/send.tpl');
			print "$OUTPUT";
			break;
			
			case "history":
			$Smarty	->	assign('MAIN', $MENU['MAIL']);
			$OUTPUT	=	$Smarty->fetch('mail/history.tpl');
			print "$OUTPUT";
			break;			

			default:
			$Smarty	->	assign('MAIN', $MENU['MAIL']);
			$OUTPUT	=	$Smarty->fetch('mail/idx.tpl');
			print "$OUTPUT";
			break;			
		}
	break;
		
	case "settings":
		switch( @$_GET['section'] )
		{
			case "interface":
			$Smarty	->	assign('MAIN', $MENU['SETTINGS']);
			$OUTPUT	=	$Smarty->fetch('settings/interface.tpl');
			print "$OUTPUT";
			break;
			
			case "profile":
			$Smarty	->	assign('MAIN', $MENU['SETTINGS']);
			$OUTPUT	=	$Smarty->fetch('settings/profile.tpl');
			print "$OUTPUT";
			break;
			
			case "database":
			$Smarty	->	assign('MAIN', $MENU['SETTINGS']);
			$OUTPUT	=	$Smarty->fetch('settings/database.tpl');
			print "$OUTPUT";
			break;
			
			case "delivery":
			$Smarty	->	assign('MAIN', $MENU['SETTINGS']);
			$OUTPUT	=	$Smarty->fetch('settings/delivery.tpl');
			print "$OUTPUT";
			break;
			
			case "statistics":
			$Smarty	->	assign('MAIN', $MENU['SETTINGS']);
			$OUTPUT	=	$Smarty->fetch('settings/statistics.tpl');
			print "$OUTPUT";
			break;
			
			default:
			$Smarty	->	assign('MAIN', $MENU['SETTINGS']);
			$OUTPUT	=	$Smarty->fetch('settings/idx.tpl');
			print "$OUTPUT";
			break;
		}
	break;

	case "tools":
		switch( @$_GET['section'] )
		{
			case "advanced":
				switch( @$_GET['opt'] )
				{
					case "lookup":
					$Smarty	->	assign('MAIN', $MENU['TOOLS']);
					$OUTPUT	=	$Smarty->fetch('tools/advanced/iplookup.tpl');
					print "$OUTPUT";
					break;
					
					case "geotargeting":
					$Smarty	->	assign('MAIN', $MENU['TOOLS']);
					$OUTPUT	=	$Smarty->fetch('tools/advanced/geotargeting.tpl');
					print "$OUTPUT";
					break;
					
					default:
					$Smarty	->	assign('MAIN', $MENU['TOOLS']);
					$OUTPUT	=	$Smarty->fetch('tools/advanced/idx.tpl');
					print "$OUTPUT";
					break;
				}
			break;
			
			case "mysql":
				switch( @$_GET['opt'] )
				{
					case "analyze":
					$Smarty	->	assign('MAIN', $MENU['TOOLS']);
					$OUTPUT	=	$Smarty->fetch('tools/mysql/analyze.tpl');
					print "$OUTPUT";
					break;
					
					case "query":
					$Smarty	->	assign('MAIN', $MENU['TOOLS']);
					$OUTPUT	=	$Smarty->fetch('tools/mysql/query.tpl');
					print "$OUTPUT";
					break;
					
					case "backup":
					$Smarty	->	assign('MAIN', $MENU['TOOLS']);
					$OUTPUT	=	$Smarty->fetch('tools/mysql/backup.tpl');
					print "$OUTPUT";
					break;
					
					default:
					$Smarty	->	assign('MAIN', $MENU['TOOLS']);
					$OUTPUT	=	$Smarty->fetch('tools/mysql/idx.tpl');
					print "$OUTPUT";
					break;
				}
			break;
			
			default:
			$Smarty	->	assign('MAIN', $MENU['TOOLS']);
			$OUTPUT	=	$Smarty->fetch('tools/idx.tpl');
			print "$OUTPUT";
			break;
		}
	break;

	default:
	$Smarty	->	assign('MAIN', $MENU['MAIN']);
	$OUTPUT	=	$Smarty->fetch('idx.tpl');
	print "$OUTPUT";
	break;
}	
	
?>
Sinistro né? Isso tudo me permite "quebrar" a URL em, por exemplo, act=manager&section=advertisers&opt=add, numa página que adiciona anunciantes.

Agradeço a ajuda.

[]'s

#23 leanjo

leanjo

    Doutor

  • Usuários
  • 912 posts
  • Sexo:Não informado
  • Interesses:...

Posted 16/06/2006, 14:55

e isso nao tem pra asp?
aauhahuauhauhauhuhuhauha

#24 Alexandre Amorim

Alexandre Amorim

    Novato no fórum

  • Usuários
  • 2 posts
  • Sexo:Não informado

Posted 12/08/2006, 13:52

Boa trade galera, gostaria de uma ajuda de como deixar minhas URLS Amigaveis. Vou postar meu query.php.

Minha estrutura é assim. "Na pagiba index.php contem topo.php, menu.php, query.php" agora vou postar meu arquivo query.php e conto com vcs pra deixar minhas URLS mais Amigoaveis..

"query.php"

<?
$var = "estrutura/principal.php";
$pg = "estrutura/$_GET[pg].php";
if(empty($_SERVER["QUERY_STRING"])) {
include($var);
} else {
include("$pg");
}
?>



Minha URLS ficam assim

www.meusite.com.br/?pg=meu_links

Agradeço,
Alexandre Amorim

#25 sk15

sk15

    Super Veterano

  • Usuários
  • 2071 posts
  • Sexo:Masculino
  • Localidade:SP - SP

Posted 01/02/2007, 03:11

Bem esse topico é velho mais vou ressucitar ele por que acredito que é algo ultiu ...
Tipo para ASP puro não existe, mas para o novo ASP.Net sim a possibilidade de fazer URL amigaveis...

Segue um tutorial:
http://angeruzzi.com...avel-em-aspnet/

e isso nao tem pra asp?
aauhahuauhauhauhuhuhauha



#26 Agente Linhares

Agente Linhares

    fuis...abraços!

  • Ex-Admins
  • 3138 posts
  • Sexo:Não informado
  • Localidade:Biritiba Mirim-SP

Posted 14/03/2007, 10:11

Este artigo se destina a fornecer o conhecimento necessário para implementação de uma técnica capaz de melhorar o posicionamento de seu site nas ferramentas de buscas por meio do uso de urls amigáveis aos buscadores. O objetivo não é fornecer um script pronto para ser colocado em cada site, mas sim dar uma idéia clara de como isso pode ser feito.

Vejam o exemplo de uma url comum:

www.site.com/materia.php?id=125

Por meio dessa url o webmaster pode identificar facilmente que deve exibir nesta página a matéria de número 125, mas o problema é a dificuldade que os buscadores têm para indexá-la. Digo isso por experiência própria com este fato já notório na comunidade. Uma página que depende de argumentos não é indexada facilmente e, no geral, não alcança posições tão boas quanto poderia nos resultados das buscas.

A solução é migrar deste formato para um otimizado para buscadores. Existem diversos meios de se alcançar o mesmo resultado, mas vou ensinar aqui a técnica que oferece mais controle. Seu site precisa estar em um servidor web Apache (o mais comum) para utilizá-la.

Para não fazer um artigo gigante vou apenas exemplificar o processo de migração em um site fictício de exemplo. Vamos lá!

Sabemos que é preciso passar aquele número, 125, para sabermos qual matéria exibir. Então nós vamos deixar funcional a seguinte url, em substituição àquela:

www.site.com/materia/125/peixes_africanos

Essa url se reveste de duas vantagens: não passa argumentos da forma tão repudiada pelos buscadores e pode trazer o título da página na url. Este segundo elemento é apenas um adicional benéfico, mas não imprescindível. Se uma das palavras da busca for encontrada na url, seu site ganhará muitas posições.

Agora chega de introdução e vamos ao método em sí!

Você vai encontrar no diretório principal do seu site, seja o "public_html" ou "www" (o local onde estão suas páginas) um arquivo chamado ".htaccess". É isso mesmo, ele não tem nome, apenas extensão. Se não existir, crie este arquivo. Nele você deve escrever o seguinte:

RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ controle.php
São apenas duas linhas. Se o arquivo já existir e houver alguma coisa nele, adicione estas linhas logo no início.

A primeira linha habilita o uso do "mod_rewrite" no seu site. A segunda direcionada todo o tráfego (com exceção de arquivos gif, jpg, png e css) para uma determinada página, neste exemplo, "controle.php".

Agora, se você digitar no navegador algo como:

www.site.com
www.site.com/nada
www.site.com/texto/semsentido

Tudo isso vai cair em "controle.php". Esta se tornou sua página mais importante e é ela quem vai tratar e direcionar todo o tráfego dentro do seu site, mas vamos fazer com que tudo isso aconteça apenas nos bastidores. O que faremos é usar a url digitada como se fosse uma string e extrair dela o que for útil. Veremos como escrever em "controle.php" um bom código de tratamento para podermos usar as tão almejadas urls amigáveis!

Nosso site exemplo tem matérias e notícias, e nós vamos utilizar ambos. As urls vão seguir o seguinte padrão:

www.site.com/materia/125/peixes_africanos

www.site.com/noticia/523/oceano_secou

Nós vamos aproveitar dessas urls apenas a seção (materia ou noticia) e a id (125 e 523, no caso). O resto (peixes_africanos e oceano_secou) está lá apenas para ajudar nas buscas e não será de serventia para o processo. Siga o modelo:

<?php

// Capturamos a url digitada
$url_site = $_SERVER['REQUEST_URI'];

// Convertemos em array quebrando a string nos pontos certos
$urln = explode("?", $_SERVER['REQUEST_URI']);
$urlt = explode("/", $urln[0]);

// Para manter a compatibilidade com as urls antigas, vamos
// verificar existência do arquivo solicitado propriamente dito
if(is_file($urlt[1])){
  include($urlt[1]);
  exit();
}

// Ja vimos que nao e um arquivo existente, entao prosseguimos
// tratando a url digitada em forma de array
$url=strip_tags($_SERVER['REQUEST_URI']);
$url_array = explode("/", $url);

// Excluimos o primeiro elemento, que sempre será vazio
array_shift($url_array);

// Se a array ficou vazia, mandamos ver no index.php
if(empty($url_array) or $url_array[0] == ""){
  include("index.php");
  exit();
}

// Se restou algo nela, vamos carregar o arquivo correto.
// Adaptacoes possivelmente so precisarao ser feitas nesta
// parte do código
else {

  // Materia
  if ($url_array[0] == "materia") {
	// capturamos a id passada na url
	$id = $url_array[1];
	// carregamos o arquivo real
	include("materia.php");
  }
	
  // Noticia
  elseif ($url_array[0] == "noticia") {
	// capturamos a id passada na url
	$id = $url_array[1];
	// carregamos o arquivo real
	include("noticia.php");
  }

  // Se nao for nenhuma das opcoes acima, carregamos a index mesmo
  else {
	include("index.php");
  }

  exit();
}

?>

Tá bom, o código está comentado mas merece alguma explicação. Apenas para ressaltar, se alguém estiver voando na leitura, isso é o que vai em "controle.php".

No início do código nós verificamos se existia o arquivo procurado na url, e neste caso carregamos ele. Isso para manter a compatibilidade com as urls que você já possui indexadas nos buscadores.

Passada esta fase, quebramos a url pelas barras ("/") existente e criamos um array que se parece com o seguinte:

www.site.com/materia/125/peixes_africanos
$url_array[0] = "materia"
$url_array[1] = "125"
$url_array[2] = "peixes_africanos"

Entretanto, só nos interessaram os dois primeiros elementos. Com eles carregamos o arquivo apropriado com base na leitura da url, no exemplo, "materia.php" ou "noticia.php", ambos existentes em nosso site fictício. No que se refere ao argumento, ou seja, a "id" da matéria ou notícia que vamos apresentar, perceba que colocamos esse dado na variável "$id". Bastará fazer a leitura dela onde for necessário.

Agora vamos saber o que muda no arquivo real que chamamos a partir do controle, ou seja "materia.php", "noticia.php" ou qualquer outro:

1) Perceba que você pode utilizar "$_GET['id']" apenas para manter a compatibilidade, porque se for uma requisição pela nova url, nós vamos pegar esse dado da variável chamada "$id". Então você vai verificar se existe algo em "$_GET['id']" e se não houver, fará o mesmo com a variável "$id", pois o argumento estará em um dos dois.

2) A segunda e última mudança diz respeito ao formato dos links para arquivos ou exibição de imagens. Nossas novas urls utilizam algumas barras, e isso indica mudança de diretório. Logo, precisamos voltar sempre à rais com uma "/" antes dos links. Observe os exemplos:

De: <a href="index.php">
Para: <a href="/index.php">

De: <img src="imagens/seta.gif">
Para: <img src="/imagens/seta.gif">


O método em sí está pronto! A intenção deste artigo não é fornecer um script milagroso que possa ser copiado e colado em qualquer site, pois isso seria utopia. O que forneço aqui é o conhecimento necessário para que cada faça a implementação da melhor forma.

Para conseguir esta última parte da url, por exemplo, basta fazer um tratamento da string trocando espaços por "_" e substituindo também a acentuação e os caracteres especiais.

www.site.com/noticia/523/oceano_secou

Use a criatividade. Você pode também criar urls assim:

www.site.com/noticia/523/oceano_secou.html

www.site.com/noticia/523/oceano_secou/oceano_secou.html

Isso porque as ferramentas de busca atribuem um peso diferente para as palavras encontradas na url em diretórios ou arquivos, e essa parte da url não será útil para o script mesmo.

Você deve trocar todos os links do seu site pelo novo formato para que surta efeito, e se quiser manter algum diretório sem o controle de url basta desativar o mod_rewrite criando nele um arquivo ".htaccess" com o seguinte conteúdo:

RewriteEngine off

Em caso de dúvidas ou dicas de melhorias sintam-se livres para postar neste tópico, o qual será aperfeiçoado ao longo do tempo com o surgimento de vantagens a serem acrescentadas no texto.

Flw!



Muito bom o tópico.

Breve vou ver se consigo bolar algo pro meu site em ASP baseando nesta lógica.

Mas tenho uma dúvida: - Qual seria melhor pra utilizar como "separador" em termos de indexação? underline ou traço?
> Busca On-line - A Busca que faltava na Internet! - Cadastre-se!
---------------------------------------------------------------------------
> BRdesign.NET - Soluções em Websites e Sistemas E-Commerce.
---------------------------------------------------------------------------
> BR-ecommerce - Sua loja virtual na internet! - Apenas R$99,90 mensais (hospedagem inclusa)!

#27 sk15

sk15

    Super Veterano

  • Usuários
  • 2071 posts
  • Sexo:Masculino
  • Localidade:SP - SP

Posted 14/03/2007, 12:16

.......
Mas tenho uma dúvida: - Qual seria melhor pra utilizar como "separador" em termos de indexação? underline ou traço?


Da um ligo nesse tópico ;)
http://forum.wmonlin...howtopic=148058

#28 flycker

flycker

    Novato no fórum

  • Usuários
  • 11 posts
  • Sexo:Não informado

Posted 10/05/2007, 17:24

Seguindo na mesma linha só que uma parte diferente.

Eu vou utilizar um campo digitado pelos os usuários (título) para fazer a url amigavel...
Alguém tem ou sabe onde tem um script PHP bom para filtrar esse campo?
Retirar espaços e converter em outros caracteres, retirar caracteres especiais... etc.

Valeu!
E esse tópico foi muito útil mesmo! :)
:lol:

Edição feita por: flycker, 10/05/2007, 17:26.


#29 sTriKe

sTriKe

    Olá! :D

  • Usuários
  • 753 posts
  • Sexo:Masculino
  • Localidade:Bento Gonçalves / RS / Brasil
  • Interesses:trago mulher e rock n roll

Posted 01/06/2007, 16:20

Bom, acabei de descobrir que o modrewrite usa MUITO uso de CPU e ram, provavelmente isso seja a causa de varios hosts aparentemente bons nao terem aguentado meu site(hostdime, hostnet, dreamhost).


Alguém sabe alguma forma de amenizar isso ou substituir por outra coisa que diminua menos a performance?

Como Instalar - Blog com tutoriais e guias para instalação de softwares, confira!!

 


#30 dilneiss

dilneiss

    Dilnei Soethe Spancerski

  • Usuários
  • 146 posts
  • Sexo:Masculino

Posted 06/12/2007, 23:50

gente desculpe o ressu.. foi que vi esse post aqui e preferi ressu ele a criar outro topico ;)
eu tenho uma área de tutoriais.. e estou usando na seguinte forma os links..
/article/como-melhorar-a-taxa-de-upload-de-sua-conex%E3o-banda-larga-38-1.html

onde /article/ significa que é tutorial e vai usar o arquivo articles.php
como-melhorar-a-taxa-de-upload-de-sua-conex%E3o-banda-larga é nome do tutorial
38 é a id do tutorial
e 1 é a página do tutorial..

como poderei criar o modrewrite para ele interpretar isso?

no caso, esse link deve redirecionar corretamente para:
articles.php?art_id=38&start=1

se deu pra entender o nome do tutorial já está ok.. mas quero que o modrewrite ignore-o e só interprete: article que irá redirecionar para articles.php
o segundo no caso a id do tutorial que redirecionará para art_id=$id
e o terceiro a página no caso colocando no mesmo link: &start=$pagina

alguém pode me dar uma mão nisso? tentei aqui, já li o tutorial todo mas não consegui fazer =/


[edit]
Consegui aqui.. fui tentando de várias maneiras e consegui exatamente oq eu queria =)
muito obrigado a quem ao menos pensou em me ajudar :)

Edição feita por: dilneiss, 07/12/2007, 22:41.

<?php
define("MELHOR_FORUM_DO_MUNDO", "Webmasters Online");
echo MELHOR_FORUM_DO_MUNDO;
?>




0 user(s) are reading this topic

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

IPB Skin By Virteq