Rimuovere public dagli url in Laravel e Apache

Mattepuffo's logo
Rimuovere public dagli url in Laravel e Apache

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!


Condividi

Commentami!