Rimuovere public dagli url in Laravel e Apache
Laravel, come penso anche altri framework del genere, utilizza una cartella public dove inserire tutti i files del sito.
Questo perchè parte dal presupposto che poi si imposti la webroot del server puntandola a public.
Ma non tiene conto di due cose:
- non è detto che possiamo fare questa modifica (vedasi hosting condivisi)
- non è detto che vogliamo farlo
Io rientro nel mio secondo caso.
E allora come fare per non avere un url del genere www.sito.it/public/index.php ?
Se siamo su Apache abbiamo diverse possibilità e questa mi è sembrata la migliore.
Si tratta di creare un file .htaccess dentro alla root:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Remove public URL from the path
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Praticamente è uguale a quello dentro public con l'aggiunta di queste due righe:
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]
Ovviamente il mod_rewrite deve essere attivo (ma questo non dovrebbe essere un problema nel 99% dei casi).
Enjoy!
server apache laravel mod_rewrite htaccess
Commentami!