Eliminar o index.php dos endereços de CodeIgniter

Todas as URLs de CodeIgniter têm um index.php que se desejarmos podemos eliminar usando um arquivo htaccess.

Por Miguel Angel Alvarez - Tradução de Celeste Veiga


Publicado em: 29/7/11
Valorize este artigo:
A verdade é que os endereços de CodeIgniter são bastante amigáveis a buscadores, mas podem ser mais ainda. Isto é algo que vamos ver neste artigo de CriarWeb.com.

No artigo anterior, sobre as características das URL de CodeIgniter, já explicamos várias coisas que convém saber sobre compor endereços para as páginas de nossas aplicações PHP. Como se dizia nesse artigo, todas as requisições de páginas de uma aplicação web em CodeIgniter passam por um arquivo index.php que está na raiz do framework. Este index.php se encarrega de redirecionar, ou encaminhar, a requisição através do controlador que esteja sendo invocado (que é indicado no primeiro segmento depois do nome do domínio).

Assim, por padrão as URL de CodeIgniter têm um formato como o que segue:

http://pruebas.com/index.php/empresas/editar/1

Muito bem, se desejamos eliminar o index.php desta URL, para simplificar o endereço , torná-lo ainda mais amigável a buscadores e também mais inteligível pelos seres humanos, podemos utilizar um arquivo .htaccess.

Nota: Em CriarWeb.com falamos em repetidas ocasiões sobre os arquivos .htaccess, explicando o que são e como podemos utilizá-los para criar automaticamente URLs amigáveis para buscadores, sem que os arquivos tenham que existir fisicamente no servidor. Recomendamos a leitura do manual Editar htaccess para criar endereços URL amigáveis para obter uma informação de referência.

Assim, poderíamos conseguir que nossos endereços não tivessem sempre o mencionado index.php e ficassem com uma forma similar a esta:

http://pruebas.com/empresas/editar/1

Para isso existiriam diversos métodos e segundo nosso domínio dos arquivos .htaccess e das expressões regulares, bem como da configuração de Apache, poderemos implementar uma ou outra. Neste artigo vamos explicar um modo que está disponível no próprio guia de uso de CodeIgniter, que testamos e resulta simples e efetivo.

Trata-se de utilizar um método de trabalho com .htaccess chamado "negativo", onde todas as URLs são redirecionadas através do arquivo index.php, a não ser que tenham uma forma determinada que não queiramos que seja redirecionada.

Por exemplo, uma URL como esta:

www.loquesea.com/empresas

Se redirecionaria a uma URL como esta outra:

www.loquesea.com/index.php/empresas

Porém esse redirecionamento se faria de maneira transparente para o usuário e para o navegador que nos visita. Ou seja, o processamento da página é feito através do index.php, nós, porém, não chegamos a perceber que no servidor se realizou esse redirecionamento, ficando a URL na barra de endereços sempre sem o index.php.

Agora bem, há determinados endereços que não vamos desejar que sejam redirecionados, como pode ser uma folha de estilos CSS. Ou seja, podemos ter em nosso servidor um arquivo como este:

www.loquesea.com/css/estilos.css

De jeito algum queremos que seja processado através do index.php, mas que diretamente seja retornado o arquivo CSS que haja nessa rota. Este é o caso em que se utiliza o método "negativo" do htaccess, através do comando "RewriteCond" (condição de redirecionamento). Este caso óbvio também o teríamos, por exemplo, em arquivos como o robots.txt ou aqueles onde possamos ter bibliotecas de código Javascript.

Código htaccess para eliminar o index.php de CodeIgniter

Desse modo, poderíamos ter um arquivo .htaccess na raiz da instalação do framework, que costuma ser também a raiz do domínio onde estamos trabalhando, com um código como o seguinte:

RewriteEngine on
RewriteCond $1 !^(index.php|css|js|images|robots.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Isto diria que se redirecionem todos os arquivos que sejam requisitados a este domínio, menos os que contenham o próprio index.php, css, js, images ou robots.txt.

O redirecionamento se fará através da mesma URL,mas agregando "index.php/" depois do nome do domínio e antes do que haja logo depois desse nome de domínio.

Nota: se tivéssemos CodeIgniter instalado em um subdiretório de nosso domínio, por exemplo, no subdiretório "carpeta", a regra de redirecionamento "RewriteRule" mudaria um pouco:

RewriteRule ^(.*)$ /carpeta/index.php/$1 [L]

Agora, só nos faltaria dizer a CodeIgniter que, ao compor URLs para os links entre as diferentes páginas de nossa aplicação web PHP, não coloque o index.php, pois não o necessitamos. Isto pode ser feito desde o arquivo de configuração principal, que está no: system/application/config/config.php

Simplesmente teríamos que editar a variável de configuração "index_page", colocando-a na cadeia vazia.

$config['index_page'] = "";

Este não seria necessariamente o único método. Por exemplo, na Wiki oficial de Codeigniter explicam um modo diferente de consegui-lo, ainda que bastante mais complexo: http://codeigniter.com/wiki/mod_rewrite/






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato