09 de May 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: 10.847



PHP

23 de February 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 August 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...

15 de August 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 ©