URLs no CodeIgniter
21 de janeiro de 2010, em Passos Iniciais, por Tárcio Zemel

No artigo sobre MVC foi visto que, no CodeIgniter, os controllers são responsáveis por controlar todo o fluxo do software; a lógica da coisa; as regras de negócio do sistema. Por padrão, as URLs no CodeIgniter são feitas para serem URLs amigáveis (Friendly URLs),quer dizer, são apresentadas em uma estrutura propícia para as páginas do site/sistema serem melhor indexadas por mecanismos de busca, tais como o Google. Em outras palavras, as URLs no CodeIgniter são baseadas em segmentos.
Estrutura de URL no CodeIgniter
Vamos tomar por exemplo o seguinte endereço, gerado a partir de um sistema fictício, feito em CodeIgniter:
http://www.site.com.br/noticias/artigos/meu_artigo |
Como podemos ver, trata-se de um URI normal, que pode ser encontrado em milhares de sites por aí. Então, dentro do CodeIgniter, isso é interpretado da seguinte maneira:
http://www.site.com.br/classe/funcao/id |
E, dentro dessa estrutura de URL, o significado de cada segmento:
- classe. O primeiro segmento, “noticias”, representa o controller (classe) “noticias”.
- funcao. O segundo segmento, “artigos”, é uma função (funcao) que existe no controller “noticias”.
- id. O terceiro, “meu_artigo”, é o parâmetro (id) da função “artigos” do controller “noticias”.
Quer dizer, existe um controller “noticias” que possui uma função “artigos” (função esta que recebe um parâmetro, “id”, para funcionar):
class Noticias extends Controller { function artigos($id) { // código da função } } |
Não se preocupe com essa estrutura, ela será melhor detalhada no artigo sobre Controllers.
Vamos supor que precisássemos de uma função com 2 parâmetros. O CodeIgniter entende, também:
class Matematica extends Controller { function soma($x, $y) { echo $x + $y; } } |
Um belo “10″ será mostrado na tela para quem acessar o URI:
http://www.site.com.br/matematica/soma/5/5 |
Removendo o segmento “index.php”
Em uma instalação do CodeIgniter padrão, o segmento “index.php” será sempre mostrado (isso devido a “questões internas”, digamos assim). Mas, caso se queira, é possível retirar do URL. Para tal, temos que nos valer de algumas poucas instruções em um arquivo .htaccess:
RewriteEngine on RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteRule ^(.*)$ /index.php/$1 [L] |
O código mostrado faz com que qualquer solicitação HTTP que não sejam para “index.php”, imagens e “robots.txt” é tratada como uma solicitação para o arquivo index.php (mesmo “index.php” não aparecendo na URI).
Em função de configurações de servidor, algumas vezes o .htaccess mostrado pode não funcionar. Caso isso aconteça com você, dê uma olhada nesse artigo sobre problemas de htaccess no CodeIgniter.
Adicionando sufixo ao URL
É possível brincar um pouco mais com as URIs no CodeIgniter. Um dos recursos interessantes é acrescentar um sufixo no URI, “dando a impressão” de que se está acessando um arquivo.
Veja no arquivo de configuração do CodeIgniter (/system/application/config/config.php) a seção “URL suffix”. É lá que você vai alterar a variável $config['url_suffix'] e inserir o que você quer que seja seu sufixo. Por exemplo, você pode ter URIs como:
http://www.site.com.br/noticias/artigos/meu_artigo.html |
Trabalhando com Query Strings
Como foi visto, por padrão, o CodeIgniter apresenta uma estrutura de URLs amigáveis. Mas o framework possui tanta flexibilidade e opções de configuração e uso que é possível trabalhar com query strings. Isso, mesmo! Se você quer reviver a “tradição” na internet e fazer com que seu sistema pareça ter sido feito há 10 anos atrás, é possível apresentar query strings!
Para isso, você deve ir ao arquivo de configuração citado (config.php) e, na seção “Enable Query Strings”, alterar a diretiva $config['enable_query_strings'] para “TRUE”, ficando dessa maneira:
$config['enable_query_strings'] = TRUE; $config['controller_trigger'] = 'c'; $config['function_trigger'] = 'm'; |
Percebam as 2 outras diretivas. É possível configurar os “triggers” que representam, respectivamente, o controller e a função que se deseja usar. Dando um exemplo de como ficaria um URI usando as query strings (e os triggers default do CodeIgniter), teríamos algo como:
index.php?c=estatisticas&m=mostrar |
Quer dizer, será executado o código da função “mostrar” do controller “estatisticas”. Nostálgico…
Conclusão sobre URLs no CodeIgniter
É gritante a facilidade com a qual se trabalha com URLs no CodeIgniter! Através de uma estrutura baseada em segmentos, os endereços gerados são fáceis para uma melhor indexação do site/sistema por mecanismos de busca, ao mesmo tempo em que oferece uma capacidade incrível para se trabalhar com as funções (nativas e criadas) do framework.
A flexibilidade é tamanha que é até possível mexer com query strings – mesmo que, para isso, tenhamos que abrir mão de alguns recursos nativos muito úteis.
Com certeza o CodeIgniter, provando mais uma vez que é o melhor framework PHP, mostrou que um dos pilares de seu poder de funcionamento é sua estrutura de URLs!
5 comentários em "URLs no CodeIgniter"
Ubiratan em 24 de janeiro de 2010
Muito bom seu artigo, gosto muito deste framework e utilizo há anos, Se você precisar de ajuda com artigos (para aumentar a frequencia de posts ) pode contar comigo ok ?
Abraços.
Tárcio Zemel em 25 de janeiro de 2010
@ Vitor Avelino,
@ Ubiratan
É, realmente a frequencia dos artigos não é das melhores, algo que pretendemos resolver para melhorar a qualidade do blog.
Temos a ideia de, futuramente, abrir espaço para artigos dos leitores. Peguei seu contato, Ubiratan! ;-)
Obrigado por comentarem!
Herton Vilarim em 9 de fevereiro de 2010
Muito show! Parabens! ótimos artigos!
- Controllers no CodeIgniter | CodeIgniter Brasil em 1 de fevereiro de 2010

Vítor Avelino em 21 de janeiro de 2010
Apesar da baixa atividade aqui, os posts são sempre simples, objetivos e de grande utilidade.
Continuem assim!
[]’s