Como configurar um arquivo .htaccess para redirecionar para o diretório public do CodeIgniter 4

Como configurar um arquivo .htaccess para redirecionar para o diretório public do CodeIgniter 4

04/05/2020 2 Por Jonathan Lamim

A nova estrutura do Codeigniter 4 trás uma nova estrutura de diretórios composta por: /app, /system, /public, /writable e /tests.

No CodeIgniter 3 ao criar um novo projeto, toda a inicialização da aplicação, ou seja, o arquivo index.php ficava na raiz do projeto. Agora, visando melhorar a segurança, o arquivo index.php e todos os arquivos públicos da aplicação devem ficar no diretório public.

Sendo assim, se você cria uma aplicação chamada meuapp em localhost, teoricamente teria a seguinte url base para a aplicação:

http://localhost/meuapp

No CodeIgniter 3 ao acessar essa url você já veria logo a tela inicial, da aplicação. No CodeIgniter 4, como toda a base de carregamento da aplicação foi movida para dentro do diretório /public, você verá uma tela semelhante à imagem a seguir:

Estrutura raiz de aplicação em CodeIgniter 4

Estrutura raiz de aplicação em CodeIgniter 4

Para ter acesso à aplicação em si seria necessário acessar a seguinte url:

http://localhost/meuapp/public

Mas além de não ficar nada bonito, você expõe um pouco a estrutura da aplicação.

A forma ideal e mais recomendada é utilizando o recurso de virtual host, para que você possa simular a URL como se estivesse online, no ambiente de produção.

Criando um virtual host

Para criar um virtual host você deve abrir o arquivo httpd-vhosts.conf do Apache (a localização dele vai depender de como foi feita a instalação do mesmo no seu ambiente) e adicionar o código a seguir a ele. Após inserir os dados, salve o arquivo e reinicie o Apache para que o host virtual comece a funcionar.

<VirtualHost *:80>
    ServerName {nome do host virtual}
    DocumentRoot "{diretorio da aplicacao}"
    <Directory  "{diretorio da aplicacao}">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

{nome do host virtual}: é a url que você utilizará para acessar, por exemplo: htaccess.exemplo
{diretorio do host}: endereço completo onde a aplicação está armazenada em seu computador (é aqui que você definirá se vai ou não apontar direto para o diretório /public)

Criando o arquivo .htaccess para redirecionamento

Na raiz da sua aplicação, crie um arquivo .htaccess e adicione o seguinte código à ele:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]

Certifique-se de que o mod_rewrite do Apache esteja ativado, caso contrário não irá funcionar.

Após criar o arquivo .htaccess você poderá acessar normalmente a url http://localhost/meuapp/ que sua aplicação será carregada como se estivesse na raiz.

Página inicial padrão do CodeIgniter 4

Página inicial padrão do CodeIgniter 4

Não uso virtual host, uso localhost, como faço?

Estou trabalhando junto com a comunidade para encontrarmos uma forma de você poder utilizar URLs com localhost e fazer esse redirecionamento sem precisar alterar a estrutura padrão da aplicação.

Assim que avançarmos e tivermos solução consistente, atualizarei esse post.