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:
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:
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
noticias.php
Fora de tópico Mostrar Código Esconder Código Mostrar EmoticonEsconder Emoticon