Com o aumento do uso de scripts no lado do servidor como PHP, ASP ,etc … as URLs tem se tornado bastante complicadas, passaram de nomes simples, como “noticias/titulo1.htm“, para complexas expressões, “index.php?mod=noticias&id=1574” e isto causa sérios obstáculos desde a memorização por parte do usuário até a indexação por parte dos mecanismos de busca.

Veremos a seguir um método para tornar as URLs mais amigáveis e significativas aos usuário e as ferramentas de busca, utilizando o mod_rewrite do apache, “Let’s go”

O que é mod_rewrite

O mod_rewrite é um módulo do servidor web Apache que é utilizado para reescrever as URLs antes que os itens solicitados sejam buscados no servidor. Isto permite que as requisições feitas a uma servidor sejam redirecionadas para determinados arquivos no servidor determinadas a partir das regras contidas no arquivo .htaccess.

Como habilitar o mod_rewrite

Para habilitar módulo rewrite basta descometá-lo na configuração do apache “conf/httpd.conf“:

LoadModule rewrite_module modules/mod_rewrite.so

Após descomentá-lo basta reiniciar o servidor e criar o arquivo .htaccess na pasta que você deseja redirecionar as requisições.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1

Vamos então entender um pouco as regras apresentadas acima:

Na linha 1 é testado se o módulo rewrite está carregado, se estiver ele é “ligado” na linha 2, informando para o apache que interprete as regras abaixo. As condições especificadas(RewriteCond) nas linhas 3 e 4 indicam para não aplicar as regras definidas em diretórios(!-d) e arquivos(!-f), note que sem estas regras mesmo as requisições para arquivos e diretórios que existam serão redirecionados.

Na linha 5 temos a regra de redirecionamento que define que todas as requisições serão direcionadas para o arquivo index.php e caminho a partir do diretório será enviado como parâmetro url para o arquivo.

Abaixo temos um pequeno exemplo de um script que trata a requisições:

if( !empty($_GET['url']) ){
    $url = explode( "/" , $_GET['url']);
    if( empty($url[count($url)-1]) ){
        unset($url[count($url)-1]);
    }
 
    switch( $url[0] ){
        case 'home': include('home.php');break;
 
        case 'noticias':
            $id = $url[1];
            include('noticias.php');break;
 
        default: include('requisicao.php');
    }
}

Basicamente dividimos o parâmetro url pelas barras, eliminamos o último elemento do array resultante se ele for vazio, ou seja, se o último caractere do parâmetro url for uma barra. Após termos os parâmetros separados em um array utilizamos um switch para incluir os arquivos que tratarão cada uma das requisições, fornecendo os devidos parâmetros.

Para melhores detalhes para criar as regras consulte a documentação do mod_rewrite

Para fazer o download dos arquivos de exemplo clique aqui

Bom era isso T++.c