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:
- URL díficil de decorar;
- Má indexação nos mecanismos de busca;
- Se mudar a tecnologia do site vai precisar mudar todas as URLs
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
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.

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!