URL Amigáveis, e .htaccess do Apache.
Autor: Thiago | Publicado: 2009-10-30T07:08:00-07:00

Tenho observado que vários desenvolvedores PHP, se perguntam: "Como faço para que meu site utilize endereços (URL) amigaveis?"Mas afinal, se não se questionou deste jeito, com certeza já pensou em transformar a URL de seus projetos php de forma que não mostre valores e variáveis.Um bom exemplo:Antes: www.endereco.com/?pagina=noticias&amp;idnoticia=4Depois: www.endereco.com/noticias/4/como-fazer-isso Para isso se usa o mod Rewrite, considerado que utilizamos Apache. É necessário habilitá-lo no arquivo de configuração httpd.conf. Lembrando que usuários Debian que tenham o Apache instalado pelo repositório, precisam de uma façanha diferente já que os desenvolvedores do Debian decidiram (eu concordo..) que o arquivo único de configuração do apache (httpd.conf) estava ficando grande demais por conter configurações gerais (ou do servidor) e mais as configurações específicas para os sites virtuais, etc...Então eles decidiram por adotar uma configuração modularizada, onde os parâmetros gerais do servidor ficam em "apache2.conf" e as configurações válidas para os sites virtuais ficam em arquivos de configuração sob a pasta /etc/apache2/sites-available/ e é la onde você deverá definir o parâmetro AllowOverride com o valor All conforme veremos logo abaixo.O arquivo httpd.conf continua existindo por questões de retro-compatibilidade, ele é fornecido vazio, mas, se vc colocar alguma diretiva nele o sistema continuará respeitando-a...Voltando a falar sobre a configuração necessária para utilização de URLs amigáveis, algumas configurações são necessárias no httpd.conf.Abra o arquivo httpd.conf e descomente a seguinte linha (remover a tralha no ínicio da linha):#LoadModule rewrite_module modules/mod_rewrite.soCaso utilize Debian siga os passos:Se fosse realizar os passos manualmente, seriam necessários alterações e criações de novos arquivos. Para resolver este problema e cortar um bom caminho, existe um comando facilitador que habilita um módulo no apache. Execute o comando: a2enmod rewrite. Ele cria um arquivo na pasta /etc/apache2/mods-enabled chamado rewrite.load no qual contem a linha LoadModule citada acima.O proximo passo é alterar as seguintes linhas do http.conf:#               # Options Indexes FollowSymLinks               # AllowOverride None             #  por:               Options FollowSymLinks Includes               AllowOverride All Desta maneira você habilita a sobreposição de arquivos de configuração, já que iremos criar um arquivo .htacess na pasta da aplicação.Caso utilize Debian, essas linhas não estarão presentes no arquivo apache2.conf. As premissões de diretórios e sites virtuais, como dito anteriormente, se localiza em /etc/apache2/sites-available/. Acesse esta pasta e edite o arquivo default, caso não tenha um site configurado nesta pasta,  este é o arquivo de configuração padrão para todos os sites. Altere todos os parâmetros AllowOverride deste aquivo, para o valor All.A permissão para utilizar .htaccess em pastas para alterar as permissões de acesso, já está realizada. Vamos então criar um arquivo chamado .htaccess  na pasta em que desejamos tal efeito com o seguinte conteúdo:RewriteEngine onRewriteRule !\.(js|ico|txt|gif|jpg|png|css|swf)$ pagina.phpEste comando habilita o Módulo Rewrite e cria uma regra que redireciona para o quivo pagina.php quando o arquivo for diferente das extensões citadas:  .js, .ico, .txt, .gif, .jpg, .png, .css, .swf.  Se este arquivo estiver dentro da pasta "teste" (http://localhost/teste), por exemplo, qualquer endereço que aponte para dentro desta pasta será redirecionado para o arquivo PAGINA.PHP conforme configuração do .htaccess. Por exemplo: http://localhost/teste/noticia/31/teste-de-noticia.Como fazer agora para capturar os parâmetros passados no arquivo pagina.php?Usando a função explode para quebrar a variável do servidor que aponta para o endereço digitado ($_SERVER["REQUEST_URI"]) da seguinte maneira:$get = explode("/", $_SERVER["REQUEST_URI"]);todos os valores estão agora no vetor $get, basta utilizálos.Se este arquivo .htaccess estiver dentro da pasta "teste" por exemplo (http://,