Este artigo trata do roteamento Laravel não funcionar em instalações novas de projeto, levando em consideração um contexto muito específico, instalações novas do servidor Apache.

Roteiro do problema

Em algum momento você vai iniciar um novo projeto com o recém instalado projeto com o framework Laravel, após executar o comando padrão para criar um novo projeto com composer:

composer create-project laravel/laravel <nome-do-projeto> --prefer-dist

Todas as dependências baixadas e carregadas pelo composer, permissões acertadas nas pastas storage e bootstrap/cache, então, para iniciar o trabalho você faz a inserção de uma rota de testes e um controller para verificação, e eis que o erro 404 (File not found) é retornado.

Passei por este problema e comecei a procurar a causa, após verificar que as rotas estavam corretas usando o artisan na linha de comando:

php artisan route:list

É difícil de verificar o problema pois a listagem de rotas está correta. Então vem o auto questionamento: eu estou errando algo muito simples, não é possível que não funcione.

Próximo passo, executar o dump do composer para limpar cache e refazer o autoload:

composer dump-autoload

Verificar novamente as rotas, além de realizar pequenas alterações, tentei acessar a rota padrão que vem instalada para /home, e eis que ela também retornou o erro 404. Muito bem, indicativa que o problema não era meu código e sim uma possível configuração mal feita.

Solução para o Roteamento Laravel

Como eu havia inicialmente pensado, o problema era simples de resolver, e somente percebi qual era a causa após ler este post no Stackoverflow: Laravel routing does not working.

Eu estou trabalhando com um computador novo, Linux Mint recém instalado, e ainda não havia feito todas as configurações do Apache.

Então, uma possível solução para resolver o problema de roteamento Laravel da versão 5.x ou mais atual é, primeiramente, configurar a sobrescrita de url no Apache, para que o arquivo .htaccess padrão possa funcionar.

Para isso execute no terminal o comando

sudo a2enmod rewrite

Em seguida abra o arquivo de configuração que deve ser encontrado no caminho /etc/apache2/apache2.conf, e encontre o seguinte trecho de código:

<Directory /var/www/>
   Options Indexes FollowSymLinks
   AllowOverride None
   Require all granted
</Directory>

Agora altere a entrada AllowOverride None para AllowOverride All.

Ao fazer isso você define que todos os “sites” instalados em podem realizar a sobrescrita a partir do diretório raiz /var/www.

Salve o arquivo e reinicie o Apache com o comando

sudo service apache2 restart

E é isso, rotas novamente funcionando, em resumo, você precisa configurar o Apache para que o .htaccess de seu projeto possa fazer a sobrescrita de url.