Como criar URLs amigáveis com mod_rewrite e PHP

Ultimamente muitas empresas estão implementando em seus sites algum esquema para gerenciar o conteúdo e facilitar a manutenção e atualização das informações que constam na página, em sites pequenos e com baixo orçamento normalmente sugiro o desenvolvimento de um sistema ao invés da adaptação do site atual para utilização de algum CMS existente.

Sites com conteúdo dinâmico normalmente passam valores através da URL para que o sistema possa interpretar e definir o que deve ser exibido ou qual ação realizar, por conta disto as URL’s acabam ficando com um aspecto complexo o que gera alguns problemas:

Nestes casos aconselho o uso de URLs amigáveis.

Com URLs amigáveis você pega um endereço que normalmente seria www.seusite.com.br/index.php?page=artigos&id=1 e transforma-la em www.seusite.com.br/artigos/1 ou até mesmo utilizando o título do artigo na URL www.seusite.com.br/artigos/aprendendo-a-criar-urls-amigaveis

Como criar URLs amigáveis

Existe mais de uma forma de criar urls amigáveis, a que eu costumo usar e vou compartilhar neste post é a criação de urls amigáveis com mod_rewrite.

O mod_rewrit é um módulo do apache que é responsável pela reescrita de urls, para que a dica deste post funcione é necessário que este mídulo esteja ativo no servidor apache. Para ativa-lo abra o arquivo httpd.conf e descomente, retirando o sustenido “#”, a linha #LoadModule rewrite_module modules/mod_rewrite.so.

Feito isto agora você vai criar, com o bloco de notas ou seu editor predileto, um arquivo chamado .htaccess e escrever o código abaixo:

1
2
3
4
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1

Salve o arquivo e coloque na raiz do seu site ou no diretorio que contém o sistema que vai utilizar urls amigáveis.

O que o código faz básicamente é:

Linha 1: Ativa o suporte a reescrita;
Linha 2: Diz que a condição de reescrita não deve se aplicar a arquivos;
Linha 3: Diz que a condição de reescrita não se aplica a diretórios;
Linha 4: Nesta linha estamos dizendo que qualquer coisa que vier após o diretorio onde o arquivo .htaccess estiver deverá ser passado através da variavel “page” para o arquivo index.php.

Sendo assim ao acessar o endereço: www.seusite.com/artigos/1 o arquivo index.php será chamado e o valor /artigos/1 será o valor da variavel “page”.

Agora é só utilizar uma função que recebe o valor da variavel e define qual conteúdo exibir, vamos criar um exemplo simples para isto utilizando PHP.

Urls amigáveis com PHP e mod_rewrite

Agora que você já tem uma regra de reescrita só precisa de um script para ler a url acessada e retornar o conteúdo correto, vamos lá?

No exemplo abaixo vamos supor que a URL acessada foi www.seusite.com.br/contato.

1
2
3
4
5
6
7
8
<?php
include('conexao.php');
$url = explode('/', $_GET['cod']);
$permalink = $url[0];
$sql = "SELECT * FROM conteudo WHERE permalink = '$permalink' LIMIT 1";
$conteudo = mysql_fetch_assoc(mysql_query($sql));
echo $conteudo['texto'];
?>

No exemplo acima estamos chamando o conteúdo cadastrado em um banco de dados com base no permalink passado, uma outra forma que costumo utilizar é chamando determinado arquivo com base na url acessada, tomando como exemplo a URL acima que deve chamar a página de contato, como o post já ficou muito longo depois compartilho com vocês essa dica.

P.S. – Antes que eu me esqueça, ao utilizar a dica acima é recomendavel sempre utilizar o caminho absoluto ao chamar imagens e arquivos.

Se você gostou deste post, escreva um comentário e/ou cadastre-se em nosso feed.

Comentários

Olá, esse artigo significou muito para mim, valeu mesmo, mas estou com um problema aqui. Quando coloco http://localhost/site/valor/teste é directionado para o index.php, porém as imagens não abrem por reconhecer “valor” como uma subpasta que está sendo acessada pelo endereço, onde após a pasta “site” é onde fica o index.php e .htaccess. Como fazer para solucionar isso? Obrigado!

Abaixo segue o que escrevi nas ultimas linhas do texto:

P.S. – Antes que eu me esqueça, ao utilizar a dica acima é recomendavel sempre utilizar o caminho absoluto ao chamar imagens e arquivos.

Então, tente colocar o caminho completo para a imagem e se não resolver entre em contato novamente.

Escreva um Comentário

(obrigatório)

(obrigatório)