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_rewriteativo. AllowOverride Allna configuração do diretório do site, para o.htaccessfuncionar.
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
| Sintoma | Causa provável |
|---|---|
| Erro 404 em todas as páginas | mod_rewrite desativado ou AllowOverride None. |
| Erro 500 | Regra mal escrita no .htaccess; confira o log do Apache. |
| CSS e imagens quebrados | base_url incorreto. |
