URLs amigáveis com mod_rewrite

URLs amigáveis com mod_rewrite

Mensagempor juliano.oliveira » 12 Nov 2011, 22:03

O que é mod_rewrite?

É um módulo escrito para o servidor Apache, responsável pela reescrita de URLs em páginas Web.
Hoje em dia, com a popularização de assuntos como SEO, usabilidade e acessibilidade, esta prática se tornou comum e está cada vez mais sendo utilizada por grande portais.

Antes de mais nada, para que o módulo mod_rewrite funcione, obviamente você deve ter configurado e ativado no seu servidor Apache.

Copilar o apache com a opção de mod_rewrite, acessar o diretorio:

Código: Selecionar todos
cd /usr/ports/www/apache22

make config

# para selecionar opção abaixo

│[X] REWRITE               Enable mod_rewrite

#copilar apache

make
   
#fazer instalação

make install

verificar se o modulo foi add ao /usr/local/etc/apache22/httpd.conf
procurar pela linha, caso não existir add:
Código: Selecionar todos
LoadModule rewrite_module libexec/apache/mod_rewrite.so

fazer as alterações em /usr/local/etc/apache22/httpd.conf

De:
Código: Selecionar todos
<Directory />
  Options FollowSymLinks
  AllowOverride None
</Directory>

Para:
Código: Selecionar todos
<Directory />
  Options All
  AllowOverride All
</Directory>


feito isso restart o Apache

Para testar, vamos criar o .htaccess

Crie um arquivo com o nome ".htaccess" (exatamente desta forma), e mova para a pasta raiz do seu domínio (ou onde queira implantar a reescrita). Em seguida, insira o código abaixo:
Código: Selecionar todos
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?cod=$1


Entendendo o código:

RewriteEngine On
Ativa o suporte à reescrita
RewriteCond %{SCRIPT_FILENAME} !-f
Não aplica a condição para arquivos
RewriteCond %{SCRIPT_FILENAME} !-d
Não aplica a condição para diretórios
RewriteRule ^(.*)$ index.php?cod=$1
Regra de reescrita onde qualquer string (.*) após a pasta, onde estiver o .htaccess, será interpretado por index.php passado na variável cod
Código: Selecionar todos
Na prática, se você tem uma URL do tipo http://www.url.com.br/secao/subsecao/, será interpretada por http://www.url.com.br/index.php?cod=secao/subsecao/. E mais, você não terá limite de níveis para utilizar com as /.


Interpretando com PHP
Com seu arquivo de reescrita criado, você já pode criar uma lógica no seu arquivo PHP para que interprete e leia as URLs passadas.

Veja um exemplo auto-explicativo:

Código: Selecionar todos
<?php
/*
 * separa a URL por "/" e insere num vetor (array)
 */
$url = explode('/', $_GET['cod']);


/*
 * imprime a string passada após a primeira /
 * no exemplo acima, seria: secao
 */
echo $url[0];

/*
 * imprime a string passada após a segunda /
 * no exemplo acima, seria: subsecao
 */
echo $url[1];
?>

Desta forma, você pode utilizar includes para suas seções, ou qualquer outro tipo de inclusão, uma vez que você já tem suas seções separadas.

Juliano Oliveira Rodrigues

Departamento TI - União Sudeste Brasileira
Ramal: 1002
juliano.oliveira
 
Mensagens: 92
Registrado em: 10 Nov 2011, 14:01
Localização: Niterói,RJ

Voltar para Conectividade

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes

cron