Atualizado em 05 de Fevereiro de 2014

Criando Urls Amigáveis com PHP

Olá pessoal,

Você sabe o que é Urls Amigáveis? Você sabia que a Url das páginas de um site têm muita importância, seja para seu visitante, para buscadores e até para a segurança do site.

O post de hoje tá mais do que especial, eu criei um Mini-curso no Portal Aprendendo PHP de como Criar Urls Amigáveis com PHP e o melhor é Grátis, basta fazer um cadastro gratuito no Portal.

Neste Mini-curso você irá aprender a como criar Urls Amigáveis com PHP utilizando o arquivo de configuração .htaccess, para acessar clique aqui.

Ver Mini-curso Aprendendo a Criar URLs Amigáveis com PHP


"Esta dica te ajudou de alguma forma?" Então ajude outras pessoas compartilhando este conteúdo com seus amigos! =)


Até a próxima.

Comentários

Sua foto do perfil

nuno

05 de Outubro de 2015 - 12:09

Sua foto do perfil

Mauricio Programador

Olá Nuno,

Isso acontece por causa do tipo de acentuação no qual a pagina esta configurado, mas a solução e bem simples.

Você vai ter que usar assim:

$url = geradorTags(utf8_decode($_POST['nome_produto']));

ou

$url = geradorTags(utf8_encode($_POST['nome_produto']));

Teste e me avise qualquer coisa.

Abraço.

07 de Outubro de 2015 - 15:32

Sua foto do perfil

nuno

01 de Setembro de 2015 - 09:35

Sua foto do perfil

Mauricio Programador

Olá Nuno,

Me mande o seus arquivos, para o email de dúvida que mostra na vídeo aula, dai eu testo aqui no meu computador.

Fico no aguardo.

Abraço.

04 de Setembro de 2015 - 11:07

Sua foto do perfil

EroSenin

23 de Julho de 2015 - 13:55

Sua foto do perfil

Mauricio Programador

Olá EroSnin,

Atualizei o arquivo lá no Portal agora com o banco de dados, pode baixar novamente que vai ter o banco de dados junto com os arquivos compactados.

Abraço.

23 de Julho de 2015 - 14:10

Sua foto do perfil

EroSenin

Boa tarde Maurício, obrigado por disponibilizar.
Cara assisti a VA, mas não consegui desenvolar uma coisa, no meu site de teste aqui estou usando a seguinte extrutura:

/
/app
/app/public/css
/app/public/js
/app/pages (onde ficam as páginas: 'sobre', 'dicas', 'produtos', 'servicos', 'promocoes', 'contato', '404', etc.)

deixei assim o código:

// CONSTANTES DO SITE
define('HOME', 'http://127.0.0.1/SiteTeste/');
define('CSS', 'app/public/css');
define('JS', 'app/public/js');
define('IMG', 'app/public/img');
define('PAGES', 'app/pages/');

define('INCLUDE_PATH_CSS', HOME . CSS);
define('INCLUDE_PATH_JS', HOME . JS);
define('INCLUDE_PATH_IMG', HOME . IMG);

// URL AMIGÁVEIS
$paginas = array('sobre', 'dicas', 'produtos', 'servicos', 'promocoes', 'contato', '404');
$url = explode('/', $_GET['url']);
$pasta = $url[0];
$arquivo = $url[1];
$identificador = $url[2];

Nas chamadas:
<link rel="stylesheet" href="<?php echo INCLUDE_PATH_CSS ?></style.css">
<img src="<?php echo INCLUDE_PATH_IMG ?>/logo.png">
<script src="<?= INCLUDE_PATH_JS ?>/jquery-1.10.2.min.js"></script>

Na index:
if($arquivo != '' || $arquivo != null && in_array($arquivo, $paginas)):
include_once PAGES.'$arquivo.php';
elseif($arquivo == '' || $arquivo == null):
include_once PAGES.'home.php';
else:
include_once PAGES.'404.php';
endif;

Só que o link para as páginas no menu não consegui fazer funcionar. Teria como dar uma ajuda?
Desde já obrigado pela atenção.

24 de Julho de 2015 - 12:39

Sua foto do perfil

Mauricio Programador

EroSenin,

Bom vamos lá para ver se consigo te esclarecer as suas duvidas.

Primeiro a constante que criamos e para ficar com a URL do Site, por tanto você não precisa criar uma para cada pasta que tiver na site estrutura.

Você apenas precisa colocar ela e a pasta depois, ficando assim:

/NOME_PASTA/NOME_ARQUIVO.EXTENSAO

Pois fazendo varias o seu gerenciamento para dar uma manutenção por exemplo fica muito ruim.

Quando ao link não tem como eu responder pois não sei como esta montado o seu link.

Mas faz assim, corrija o que te passei acima e depois me envio o arquivo por email que eu vejo para você.

Abraço.

24 de Julho de 2015 - 12:50

Sua foto do perfil

Cleydson

11 de Julho de 2015 - 00:05

Sua foto do perfil

Mauricio Programador

Olá Cleydson,

Você assistiu o Mini Curso que eu disponibilizei gratuitamente neste post? ele mostra de forma completa como fazer isso. Consegui assistir?

Abraço.

13 de Julho de 2015 - 11:30

Sua foto do perfil

Renato Oliveira Formenton Filho

06 de Janeiro de 2015 - 15:12

Sua foto do perfil

Mauricio Programador

Olá Renato,

mandei para o seu e-mail.

abraço.

07 de Janeiro de 2015 - 08:44

Sua foto do perfil

rikardo

21 de Junho de 2014 - 12:17

Sua foto do perfil

Mauricio Programador

Olá rikardo,

você irá precisar criar apenas mais uma variável, por exemplo sua url pode fica assim:

.../noticias/2

Sendo que o 2 e pagina, então no PHP fica assim:

$url = explode('/', $_GET['url']);
$arquivo = $url[0];
$identificador = $url[1];
$paginacao = $url[2];

Dai basta usa a variável $paginacao onde houver a paginação.

Abraço.

21 de Junho de 2014 - 13:43

Sua foto do perfil

Rikardo

Mauricio, até nessa parte intendi.
sem url amigável a paginação aparece dessa forma: site/noticias.php?pag=2
A minha duvida persiste de que forma utiliza a variável $paginação.
Oque será precisa incrementar no código abaixo?

<?php
if($arquivo != '' && in_array($arquivo, $paginas))
{
include "$arquivo.php";

}

elseif($arquivo == '')

{

include 'home.php';

}

else

{

include '404.php';

}

?>

23 de Junho de 2014 - 10:34

Sua foto do perfil

Rikardo

Olá Mauricio, agradeço pela sua sua ajuda e já consegui resolver o problema.

Estou com um outro problema, depois que hospedei o site, até aparece a url amigável quando coloca o mouse em cima do link, mas quando clico ele redireciona para a pagina de erro do servidor. Oque pode ser esse problema? o que devo fazer?
Desde já Agradeço!

23 de Junho de 2014 - 10:35

Sua foto do perfil

Mauricio Programador

Olá Rikardo,

Quem bom que conseguiu.

Você esta usado a URL absoluta? Ex.:

define('url', 'http://localhost/empresa_x');

e usando elas nos links? Ex.:

<a href="<?php echo url?>/noticia"...

Fico no aguardo.

23 de Junho de 2014 - 10:36

Sua foto do perfil

Rikardo

Olá Mauricio, o problema foi identificado no arquivo .htaccess
a extensão estava salva com letras maiúscula e o servidor de hospedagem não estava reconhecendo esse aquivo apenas no servidor local. Já alterei e finalizei o meu projeito. :)

Você está de parabéns, pelas vídeo-aulas bem explicado e pela agilidade nas respostas nos comentários!

24 de Junho de 2014 - 10:40

Sua foto do perfil

Mauricio Programador

Olá Rikardo,

fico feliz que tenha conseguido e gostado do material.

Precisando estamos ai para ajudar. Grande Abraço.

24 de Junho de 2014 - 10:40

Sua foto do perfil

Igor Sousa

08 de Março de 2014 - 21:49

Sua foto do perfil

Mauricio Programador

Olá Igor,

este mini-curso mostra exatamente como fazer isso que você deseja. Chegou a assistir todo? o que você não conseguiu? Posta aí.

Abraço.

09 de Março de 2014 - 10:36

Sua foto do perfil

Igor Sousa

Olá mauricio, assisti a sua video aula mais num consigo passar o jeito pra meu site
a parte que tenho mais dúvidas é como fazer o link pra pagina de exibir os daddos.
o meu ta assim:
<a href="artigos.php?exibir&id=<?php echo $row_artigos['id'];?>
&titulo=<?php echo $row_artigos['url'];?>"><?php echo $row_artigos['titulo'];?></a>

eu nao consigo tirar os parametos: exibir,id e nem o titulo.

e tbm nao sei como fazer pra pagina artigos receber os dados.

20 de Março de 2014 - 09:43

Sua foto do perfil

Mauricio Programador

Olá Igor,

Pelo que vi pelo link você deve estar guardando a URL do post na variável $row_artigos['url'], então seu link ficaria assim:

...href="[endereço do site completo]/artigos/<?php echo $row_artigos['url'];?>">...

So não esqueça de configura o arquivo .htaccess como mostra na vídeo-aula.

Depois no SQL da pagina arquivos para fazer a busca pelo registro basta buscar pelo campo URL com o valor passado na variável $identificador da função:

$url = explode('/', $_GET['url']);
$arquivo = $url[0];
$identificador = $url[1];

Espero ter ajudado.

Abraço.

20 de Março de 2014 - 09:44

Sua foto do perfil

Igor Sousa

eu fiz um sistema pra mais simples pra vc vê como to enrolado..kk

Pagina index.php{

<?php include("conn.php"); ?>
<html><head><title>Url Amigáveis</title></head>
<body>
<?php
$query_url = mysql_query("SELECT * FROM noticia");
$row_url = mysql_fetch_array($query_url);
$id = $row_url['id'];
$slug = $row_url['slug'];
?>

<?php do{?>

<a href="artigos.php?id=<?php echo $id;?>&slug=<?php echo $slug;?>">
<?php echo $row_url['titulo'];?><br></a>

<?php }while($row_url = mysql_fetch_array($query_url));?>
</body>
</html>

Agora ...
Pagina artigos.php

<?php include("conn.php"); ?>
<html><head><title>Url Amigáveis</title></head>
<body>

<?php
$id = $_GET['id'];
$query_url = mysql_query("SELECT * FROM noticia WHERE id = $id");
$row_url = mysql_fetch_array($query_url);
?>

<h1><?php echo $row_url['titulo'];?></h1>

</body>
</html>

Ficarei muito alegre se eu aprender criar url amigaveis iguais as suas de seu site....
Abraço...

20 de Março de 2014 - 14:45

Sua foto do perfil

Mauricio Programador

Olá amigo,

Bom vamos lá, pela estrutura que você me mandou ficaria assim:

index.php

<?php
include("conn.php");

define('url', 'http://localhost/empresa_x');

$paginas = array('artigos');

$url = explode('/', $_GET['url']);
$arquivo = $url[0];
$identificador = $url[1];
?>
<html><head><title>Url Amigáveis</title></head>
<body>
<?php
if($arquivo != '' && in_array($arquivo, $paginas))
{
include "$arquivo.php";
}
elseif($arquivo == '')
{
include 'home.php';
}
else
{
include 'pagina-nao-encontrada.php';
}
?>
</body>
</html>

Dai vai ter que criar um arquivo com o nome home.php e colocar:

<?php
$query_url = mysql_query("SELECT * FROM noticia");
$row_url = mysql_fetch_array($query_url);
$id = $row_url['id'];
$slug = $row_url['slug'];
?>

<?php do{?>

<a href="<?php echo url?>/artigos/<?php echo $slug;?>">
<?php echo $row_url['titulo'];?><br></a>

<?php }while($row_url = mysql_fetch_array($query_url));?>

Depois na página artigos.php, fica assim:

<?php
$id = $_GET['id'];
$query_url = mysql_query("SELECT * FROM noticia WHERE url = '$identificador'");
$row_url = mysql_fetch_array($query_url);
?>

<h1><?php echo $row_url['titulo'];?></h1>

Abraço.

20 de Março de 2014 - 14:58

Sua foto do perfil

Igor Sousa

entendi agora a estrutura, mas no .htaccess não acertei...

21 de Março de 2014 - 10:05

Sua foto do perfil

Igor Sousa

Olá Mauricio, consegui criar as urls amigaveis.
Pela estrutura que vc me indicou, alterei umas coisinhas e deu certinnho
mudei todo conteudo do index para o home.
Essa é a pagina 'index.php'
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Programação Ativa</title>
</head>

<body>
<?php
define('url', 'http://localhost/programacaoativa');
if(!isset($_GET['url'])){
include("home.php");
}else{

nesse else queria colocara pagina 404.php, tipo se nao tiver nenhuma pagina do site , ela chamar 404.php

}

?>
</body>
</html>

Esse foi a modificação que fiz na pagina detalhes
<?php
$url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING'];

$url = explode('/',$url);

echo @$url[0].'<br />';
echo @$url[1].'<br />';
echo @$url[2].'<br />';
$cod = @$url[3].'<br />';
$titulo = @$url[4].'<br />';
echo @$url[5].'<br />';
echo @$url[6].'<br />';
echo @$url[7].'<br />';
?>

já o link ficou assim:
<a href="http://localhost/programacaoativa/post/<?php $cod ; ?>/
<?php $slug ; ?>" class="label"><?php echo $row_lista_veja['titulo'] ; ?>
</a>

já no htaccess ficou assim.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^home$ home.php
RewriteRule ^post(.*)$ detalhes.php

e minha url ficou assim :

http://localhost/programacaoativa/post/27/painel-de-ferramentas-no-photoshop-cs6

Obg pelas dicas, vc me ajudou muito, já tava com uma semana pesquisando em vários sites e nada de eu conseguir nada.

agora eu qeria era criar esse newlwtter e pra que serve sua função no site....

21 de Março de 2014 - 10:10

Sua foto do perfil

Mauricio Programador

Olá Igor,

que bom que conseguiu, fico feliz em ter ajudado. Ja a função de newsletter basta você usar a função mail do PHP, busca aqui no blog por esta função que você vai encontrar como enviar e-mail pelo PHP.

Abraço e sucesso.

21 de Março de 2014 - 10:11

NEWSLETTER

Receba dicas de programação
em seu e-mail

TWITTER

Acompanhe tudo o que rola
com Mauricio Programador

NEWSLETTER