Função para criar URL amigável com PHP

Na realidade a URL tem a função de endereçar um determinado recurso na internet, um site, FTP etc. Mas como oportunidade de marketing e vendas, tornou-se importante a usabilidade, SEO (Otimização dos motores de busca) e a acessibilidade, assim gerando a melhora da experiência do o usuário.
Nesse artigo pretendo ensinar uma forma fácil de construir uma função que fique responsável por formatar a URL, tornando-a dinâmica e amigável.
Diferente das demais formas de construção de URL´s Amigáveis, essa forma trabalha com um método de "Alias" (apelidos) para determinado arquivo ou pasta e possibilita a o envio de variáveis via GET.
Obs.: Esse método está sendo aplicado da forma mais simples possível, justamente para melhor entendimento do processo.
Requerimento:
  • Conhecimentos intermediários nas diretivas do Apache;
  • Conhecimentos Intermediários em expressão Regular;
  • Conhecimentos Intermediários em PHP;
  • Apache com o mod_rewrite habilitado.
Primeiramente, criaremos um diretório onde ficará o projeto, vamos chamá-lo de projeto_1.
Dentro desse diretório criaremos três arquivos e um diretório:
  • O arquivo .htaccess, onde criaremos a regra de reescrita da url;
  • O arquivo main.php, que será responsável dela indexação do site;
  • O arquivo url_response.php, onde será codificada a função para o tratamento da url;
  • O diretório applications, onde serão guardados nossos aplicativos ex.: noticias.php, índex.php etc
No arquivo .htaccess vamos criar regras de url usando o mod_rewrite(módulo responsável por reescritas de url) do apache.
# Habilitamos o modo Rewrite
RewriteEngine on
#Aqui, criamos as regras de redirecionamento.
RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ main.php
Detalhando o arquivo .htaccess
Na diretriz RewriteEngine é possível habilitar(On) ou desabilitar(off) o modo de reescrita do apache. Em RewriteRule configuramos a regra de reescrita das urls, neste caso redirecionamos para main.php.
Feito isso vamos criar e codificar a função responsável por tratar a URL, abra o arquivo url_response.php:
<?php

        //diretório do projeto
        if(!definedPROJECT_DIR´))
                definePROJECT_DIR´, ´projeto_1´);
                
        // diretório da aplicacao
             if(!definedAPPLICATION_DIR´))    
                defineAPPLICATION_DIR´, ´applications´);

        // URL enviado
            if(!definedREQUEST_URI´)) 
                defineREQUEST_URI´    ,str_replace(´/´.PROJECT_DIR,´´,$_SERVERREQUEST_URI´]));

         /**
               * Função Resposável pelo tratamento da URL
               *
               * @author Camilo Teixeira de Melo
               * @link http://www.camilotx.com.br
               * @param string $urlpatterns array com os modelos de url
               * @return void
              **/
        function url_response($urlpatterns){
                        foreach($urlpatterns as $pcre=>$app){
                                if(preg_match("@^{$pcre}$@",REQUEST_URI,$_GET)){
                                                include(APPLICATION_DIR.´/´.$app);
                                                exit();
                                }else{
                                        $msg = ´<h1>404 Página não existe</h1>´;
                                }
                        }
                        echo $msg;
                return;         
        }
?>
Neste trecho:
//diretório do projeto
if(!defined(´PROJECT_DIR´))
define(´PROJECT_DIR´, ´projeto_1´);
Definimos a constante PROJECT_DIR onde conterá o diretório do projeto. No trecho a seguir definimos o diretório da aplicação e a url enviada pelo browser.
// diretório da aplicacao
if(!defined(´APPLICATION_DIR´))
define(´APPLICATION_DIR´, ´applications´);
// URL enviado
if(!defined(´REQUEST_URI´))
define(´REQUEST_URI´ ,str_replace(´/´.PROJECT_DIR,´´,$_SERVER[´REQUEST_URI´]));
Por último a constituição da função url_response responsável pelo tratamento da url.
foreach($urlpatterns as $pcre=>$app){
if(preg_match("@^{$pcre}$@",REQUEST_URI,$_GET)){
include(APPLICATION_DIR.´/´.$app);
exit();
}else{
$msg = ´<h1>404 Página não existe</h1>´;
}
}
Aqui é criado um laço responsável por percorrer o array com as URLs padrões e procurar o arquivo na pasta de aplicações, caso exista é feito sua inclusão. Caso não exista o arquivo apresento uma mensagem de página inexistente, ou 404.
Usando a função no arquivo main.php:
<?php
           includeurl_response.php´); 
          $urlpatterns = array(
                ´/´=>´index.php´,
                ´/noticias´=>´noticias.php´,
                ´/noticia/(?P<id_noticia>\d+)´=>´noticias.php´,
           );
          url_response($urlpatterns);
?>
O include não tem segredo. Na array $urlpatterns como o próprio nome diz refere-se aos padrões de url. O índice do array é a url e o valor é o arquivo que deve ser executado.
Exemplo:
´/´=>´index.php´
´/´ refere-se a raiz por exemplo www.dominio.com.br/ que será redirecionado ao índex.php
´/noticias´=>´noticias.php´
´/noticias´ refere-se a www.dominio.com.br/noticias onde executa o arquivo noticias.php
´/noticia/(?P<id_noticia>\d+)´=>´noticias.php´
Aqui eu usufruo da expressão regular para enviar um parâmetro com valor decimal
Via GET. A url ´/noticias/(?P<id_noticia>\d+)´ refere-se a www.dominio.com.br/noticias/12. O valor é acessado via GET para o arquivo notícias.php
Por último criamos os arquivos índex.php e noticias.php na pasta applications.
Abaixo deixo um exemplo simples dos arquivos para melhor entendimento do processo de cada arquivo.
index.php
<?php
        echo ´você está na index´;
?>
noticias.php
<?php
             i f(isSet($_GETid_noticia´]))
                 echo ´Exibindo a notícia de id ´ .$_GETid_noticia´];
            else
                  echo Notícias´);
?>
Obrigado pelo seu comentário

Postagens Relacionadas

Related Posts Plugin for WordPress, Blogger...

Programador GB