09 de maio de 2017

Reescrita de URL

Aprender a criar URLs amigáveis através da Reescrita de URL é algo fácil mas extremamente importante para qualquer programador.

Para isso vamos aprender três partes necessárias:

  1. Criar e configurar o arquivo .htaccess
  2. Capturar os parâmetros da URL
  3. Carregar o contúdo correspondente

 

1 - htaccess

O .htaccess (o nome do arquivo é escrito desta maneira mesmo, com um ponto na frente) é um arquivo especial utilizado pelo Apache (servidor web) que verifica se há alguma restrição ou configuração especial para o diretório acessado. É com ele que iremos ativar a reescrita de URL e configurar outros parâmetros necessários.

Crie o arquivo .htaccess, insira o contúdo abaixo e salve o mesmo na pasta raiz do seu projeto (a mesma onde se encontra seu index.php).

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

A primeira linha habilita a reescrita.

A segunda e terceira linha dizem para o Apache ignorar a reescrita caso o endereço se referir a um arquivo ("f" de file) ou pasta ("d" de directory).

A quarta linha indica ao Apache qual a regra de reescrita será aplicada. Ela basicamente captura tudo o que vier depois de index.php e retorna como parâmetro para a página. Não vou me extender muito nos detalhes desta configuração, mas caso você queira saber mais a respeiro, indico ver a documentação do mod_rewrite do Apache.

Existêm algumas variações desta configuração, mas esta é a que uso.

OBS: Lembre-se também de habilitar o mod_rewrite do Apache e reiniciá-lo. Caso não saiba como fazer pesquise no Google de acordo com seu sistema operacional.

 

2 - Capturando os parâmetros

Queremos que nossas URLs sejam formadas com este padrão:

www.meu-site.com/pagina/parametro1/parametro2

Onde a página pode ser algo como "home", "produtos", "contato", etc. E onde poderemos ter nenhum, um, ou dois parâmetros (esta parte pode ser adaptada conforme sua necessidade).

Apenas para exemplificar melhor segue outro exemplo:

www.meu-site.com/produtos/eletronicos/pen-drive-32gb

Neste caso temos a página "produtos", a categoria "eletronicos" como 1º parâmetro e o item "pen-drive-32gb" como 2º parâmetro. Claro e direto!

No começo de seu index.php insira o seguinte trecho de código:

<?php
	$url = explode('/',$_GET['url']);
	$pagina = !empty($url[0]) ? $url[0] : 'home';
	$parametro = !empty($url[1]) ? $url[1] : null;
	$parametro2 = !empty($url[2]) ? $url[2] : null;
?>

Neste trecho estamos fazendo o seguinte:

Na primeira linha verificamos se o parâmetro url existe. Fazemos isso checando se o mesmo foi passado via HTTP GET com o método isset($_GET['url']). O $_GET basicamente pega tudo o que foi passado como parâmetro na URL após o sinal de interrogaçao "?". Então se passarmos na URL "index.php?cor=branca", o retorno de $_GET['cor'] será "branca".

Confira novamente a última linha do .htaccess, nela você verá que criamos o parâmetro url depois do index.php que irá receber nossos parâmetros.

Caso afirmativo, separamos (explode) pelas barras (/) cada parâmetro e gravamos no array $url.

Agora pegamos cada item do array $url e transferimos para nossas variáveis correspondentes.

Caso não tenha nenhum parâmetro na página, retornamos o valor padrão "home", pois sempre será necessário termos uma página para ser carregada, já para os 2 parâmetros retornamos NULL caso não tenha sido passado nada.

 

3 - Carregando o conteúdo

Agora com todas informações em mãos, vamos para a etapa final que é carregar o contúdo.

Para isso vamos ter um HTML padrão que servirá como "corpo" de nossas páginas. Este arquivo será o próprio index.php e terá um cabeçalho e rodapé padrão, onde apenas o contúdo central da página será alterado.

Vamos criar um HTML básico aqui, mas você deve incrementá-lo conforme necessário:

<!DOCTYPE html>
<html lang="pt-BR">
    <head>
        <meta charset="UTF-8">
        <title>Reescrita de URL</title>
    </head>
    <body>
        <div class="menu">
            <!-- Insira seu menu aqui -->
        </div>
     
        <div class="conteudo">
            <?php
                if (file_exists($pagina.'.php')) {
                    include $pagina.'.php';
                } else {
                    include 'pagina-erro.php';
                }
            ?>
        </div>
     
        <div class="rodape">
            <!-- Insira seu rodapé aqui -->
        </div>
    </body>
</html>

Veja que a mágica acontece dentro da div com a classe "conteudo".

Nela verificamos se o arquivo existe com base no parâmetro salvo na variável $pagina e caso exista, carregamos o mesmo, caso o arquivo não exista, carregamos um outro informando o erro (esse erro é o 404 - not found que normalmente vemos ao acessar uma página que não existe) e você pode personalizar o mesmo como queira.

Então no nosso exemplo anterior o sistema iria tentar carregar a página "produtos.php". E ainda teríamos acesso aos nossos 2 parâmetros, onde normalmente iríamos usá-los nas nossas consultas SQL para trazer apenas o contúdo desejado.

 

Conclusão

Pode parecer um pouco complicado à primeira vista, mas com a prática este processo se torna natural, facilitando em muito nosso desenvolvimento, organização e legibilidade do código.

Espero que tenham gostado e utilizem este valioso recurso em seus sites.

Grande abraço!

Visualizações: 702



PHP

23 de fevereiro de 2014

Paginação PHP 2

Neste tutorial vamos incrementar o tutorial anterior e incluir as setas de anterior e próximo, além de aplicar alguns estilos CSS pra melhorar a visualização...

21 de agosto de 2013

Paginação PHP

Neste tutorial vou apresentar um código para Paginação PHP bem simples. Para manter a simplicidade eu não inclui as setas para anterior e próximo, mas apenas a numeração das páginas...

18 de agosto de 2013

Jogos PHP

Quem disse que não dá pra criar Jogos PHP? É possível sim, claro que não serão jogos de aventura onde seu personagem passeia pela tela na caça de inimigos, mas existem muitos Jogos PHP espalhados pela internet...

15 de agosto de 2013

Criando resumo em PHP

Muitas vezes queremos pegar somente a parte inicial de um texto para criar uma espécie de resumo, este recurso é muito útil para criar chamadas de notícias por exemplo...

Sérgio Toledo | Full-Stack Web Developer | LinkedIn | GitHub | YouTube

Todos os direitos reservados ©