Correggere Errore 404 in Lumen e Apache
Lumen è un micro-framewrok basato su Laravel, e io lo sto usando per creare un web service.
Una volta installato e creato un progetto con composer, sono andato in https://www.sito.it/api/public e tutto ha funzionato.
La prima route, infatti, viene creata in automatico.
Ed anche il file .htaccess per Apache dentro alla cartella public:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
Il mio problema è stato quando ho creato una mia route personale nel file routes/web.php:
$router->get('foo', function () {
return 'CIAO';
});
In pratica:
- https://www.sito.it/api/public/foo -> Errore 404
- https://www.sito.it/api/public/index.php/foo -> Ok
Poi ho scoperto che il motivo era la configurazione di Apache.
In pratica dovete modificare il file /etc/apache2/apache2.conf:
<Directory /var/www/>
Options Indexes FollowSymLinks
#AllowOverride None
AllowOverride All
Require all granted
</Directory>
Il tutto sta nella direttiva AllowOverride.
Se anche cosi non risolvete, assicuratevi di avere il mod_rewrite abilitato (ma è difficile che non lo sia, se non appena installato):
# a2enmod rewrite
In ogni caso, dopo le modifiche, riavviate Apache per essere sicuri:
# systemctl restart apache2
Enjoy!
server apache php lumen mod_rewrite allowoverride
Commentami!