Dev (Back & Front)ARTIGO

Melhorando o formato das URLs do CodeIgniter em servidores Apache

Nesse artigo vou mostrar uma configuração específica do arquivo .htaccess para melhorar o formato das urls aceitas em projetos feitos com CodeIgniter em servidores apache.

No primeiro artigo da série sobre o framework, foi mostrado o arquivo de configuração (config.phpPHP44 conteúdosPadronizando seu código com PHP CS FixerDev (Back & Front) · mai 2019Docker de imagem. Para rodar projetos PHP em menos de 30 segundosDev (Back & Front) · jan 2026PHP 7.3: conheça as novidades desta versãoDev (Back & Front) · abr 2019Ver tudo em Dev (Back & Front) ), nele temos uma variável chamada “index_page” configurada com o valor default: “index.php”. Essa variável define o que vai na url antes do nome do controller e do método chamado. No caso do artigo anterior, usamos a url:

index.php/welcome/listar2

Esse era o método que criamos para o nosso exemplo de paginação. Como eu tenho um diretório que uso para artigos e dentro dele criei um projeto chamado exemplo, a url completa no meu caso é:

http://localhost/artigos/exemplo/index.php/welcome/listar2

O que vamos fazer nesse artigo é transformar essa url nesse formato:

http://localhost/artigos/exemplo/welcome/listar2

Pela lógica, bastaria apagar o conteúdo da variável index_page, retirando o valor “index.php”. Mas só isso não basta, pois o servidor retorna erro 404 dessa forma.

A reestruturação da url é interessante, já que ela fica mais amigável tanto para o usuário do site, como para robôs de busca (bom para SEOSEO4 conteúdosPor que a transição do SEO clássico para a Otimização de Motores Generativos (GEO) exige que se repense a modelagem semânticaMarketing Tech · mai 2026O impacto da pesquisa e do SEO no comércio eletrônico: insights da State of Search Brasil 5Marketing Tech · fev 2025SEO por Elas 2025: Impulsionando e promovendo mulheres no Marketing DigitalMarketing Tech · fev 2025Ver tudo em Marketing Tech ).

A configuração é simples, existem duas formas de se fazer isso. A primeira delas é criar um arquivo com o nome “.htaccess” com o seguinte conteúdo:

RewriteEngine on<br />RewriteCond %{REQUEST_FILENAME} !-f<br />RewriteCond %{REQUEST_FILENAME} !-d<br />RewriteRule ^(.*)$ index.php/$1 [L]

Essas linhas abrem o arquivo ou diretório chamado na url, caso ele exista, caso contrário ele adiciona uma chamada para o index.php dessa url, ou seja, faz exatamente o que precisamos. O problema dessa regra é que os arquivos ficam acessíveis, chamando-se diretamente o caminho físico deles.

Outra forma de se fazer, mais segura também, é criar o mesmo arquivo (.htaccess) mas com regras diferentes:

RewriteEngine on<br />RewriteCond $1 !^(index\.php|css|js|img|robots\.txt)<br />RewriteRule ^(.*)$ /artigos/exemplo/index.php/$1 [L]

A diferença dessa regra é que ela especifica exatamente quais arquivos/diretórios não deverão receber a regra. No exemplo acima, caso seja um diretório css, js ou img, ou também um arquivo index.php ou robots.txt será mantida a chamada http sem mudanças, caso contrário faz exatamente o que a outra forma também faz: realiza a chamada para o respectivo index.php.

A única desvantagem dessa abordagem é que, caso seja necessária a criação de novos diretórios no servidor com arquivos de imagem, por exemplo, é preciso adicionar esse novo diretório na condição (separando-se com o pipe: ‘|’ e dando-se os escapes necessários em pontos separadores de extensões).

Alguns servidores apache não habilitam o mode rewrite por padrão, por isso é bom adicionar uma condição nas regras para saber isso, basta adicionar:

ou

Para o que é para se fazer em caso de haver ou não o suporte a reescrita de url… Segue abaixo a versão final do arquivo .htacces:

<p></p>

É desenvolvedor web há mais de 8 anos, foi representante da Fatec Zona Sul na maratona brasileira de programação por dois anos consecutivos. Atualmente estuda Matemática Aplicada no IME-USP Focado em algoritmos, estrutura de dados e desenvolvimento web em geral. Possui certificações em Java: SCJP (OCJP) e SCJA (OCJA) e em HTML5/Javascript/CSS MCSD 70-480. Atualmente é Analista de Sistemas em grandes projetosno portal UOL.

Ver perfil