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.php↳PHP44 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 SEO↳SEO4 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>





