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(!defined(´PROJECT_DIR´))
define(´PROJECT_DIR´, ´projeto_1´);
// 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´]));
/**
* 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
include(´url_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($_GET[´id_noticia´]))
echo ´Exibindo a notícia de id ´ .$_GET[´id_noticia´];
else
echo (´Notícias´);
?>