Programação

Removendo index.php e deixando a URL amigável no Codeigniter

Remova o index.php da URL do CodeIgniter e deixe as URLs amigáveis: configuração do .htaccess, do arquivo config.php e do Apache para CodeIgniter 3 e 4.

Capa: Removendo index.php e deixando a URL amigável no Codeigniter

Por padrão, o CodeIgniter exibe o index.php na URL (site.com/index.php/produtos). Dá para remover e deixar o endereço limpo (site.com/produtos), o que é melhor para o usuário e para o SEO.

Pré-requisitos

  • Servidor Apache com o módulo mod_rewrite ativo.
  • AllowOverride All na configuração do diretório do site, para o .htaccess funcionar.

CodeIgniter 3

1. Crie o .htaccess na raiz do projeto (mesma pasta do index.php):

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

2. Ajuste application/config/config.php e deixe o index_page vazio:

// antes
$config['index_page'] = 'index.php';

// depois
$config['index_page'] = '';

Se a URL com /index.php/ retornar erro, confira também o uri_protocol (REQUEST_URI costuma funcionar) e o base_url.

CodeIgniter 4

No CodeIgniter 4, a pasta pública é a public/, que já traz um .htaccess com as regras de reescrita. O indexPage em app/Config/App.php já vem vazio por padrão:

public string $indexPage = '';

O ideal é apontar o document root do servidor para a pasta public/. No XAMPP e em hospedagens compartilhadas, mova ou configure o domínio para ela, mantendo app/ e system/ fora da área pública.

Nginx

No Nginx não existe .htaccess. Use no bloco do site:

location / {
    try_files $uri $uri/ /index.php?$args;
}

Problemas comuns

SintomaCausa provável
Erro 404 em todas as páginasmod_rewrite desativado ou AllowOverride None.
Erro 500Regra mal escrita no .htaccess; confira o log do Apache.
CSS e imagens quebradosbase_url incorreto.

Mais artigos