Alex Costantino

Information Technology DevelopmentI.T. Development

🇬🇧️ 🇬🇷️ IT

Il file .htaccess definitivo per Laravel




Ho creato il file .htaccess definitivo per Laravel.

Il migliore mai scritto. Un capolavoro abbagliante della configurazione server.

Va bene, forse sto esagerando un po’.

In realtà, risolve in modo semplice e pratico alcuni comuni problemi di hosting Laravel, un risultato comunque piuttosto notevole per un file così piccolo.

Vediamo come funziona.

Il problema dell’URL

In un’installazione Laravel standard, l’applicazione viene servita attraverso la cartella public/.

A seconda della configurazione dell’hosting, potresti quindi ritrovarti con un URL come questo:

https://www.acitd.com/public/

Invece della versione più pulita:

https://www.acitd.com/

Il primo funziona, naturalmente, ma quel public/ aggiuntivo non aiuta esattamente l’URL a vincere un premio per l’eleganza.

Il problema della sicurezza

C’è poi una questione più importante.

Se carichi l’intero progetto Laravel direttamente in una cartella accessibile pubblicamente, senza configurare correttamente il web server, anche i file esterni a public/ potrebbero diventare raggiungibili attraverso il web.

Ed è una situazione che conviene decisamente evitare.

Idealmente, la document root del server dovrebbe puntare direttamente alla cartella public/ di Laravel. In questo modo, i file di configurazione, il codice dell’applicazione, le dipendenze e gli altri file sensibili rimangono fuori dall’area accessibile pubblicamente.

Tuttavia, alcuni servizi di shared hosting non permettono di modificare la document root.

Ed è qui che entra in scena il nostro eroico .htaccess.

Laravel utilizza anche un’altra cartella pubblica:

storage/app/public/

Ecco la differenza tra le due:

Cartella Utilizzo
public/ Contiene i file pubblici statici, come gli asset aggiunti durante lo sviluppo.
storage/app/public/ Contiene i file pubblici dinamici creati o caricati tramite l’applicazione.

La soluzione .htaccess definitiva

La configurazione seguente indirizza le richieste pubbliche verso le cartelle corrette di Laravel, mantenendo il resto del progetto fuori dalla portata dei visitatori.

In pratica, gli utenti vedono i file di cui hanno bisogno, ma non l’intera struttura dell’applicazione.

Una buona soluzione per tutti.

È davvero il file .htaccess definitivo?

Sarà la storia a deciderlo.

Per il momento, possiamo dire che fa molto bene il proprio lavoro.

1. Inserisci questo file .htaccess nella cartella principale del progetto /:

.htaccess

RewriteEngine On
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -d
RewriteRule ^ %{REQUEST_URI}/ [R=301, L]
RewriteCond %{REQUEST_URI} !^/storage/app/public/
RewriteCond %{DOCUMENT_ROOT}/storage/app/public%{REQUEST_URI} -f
RewriteRule ^ /storage/app/public%{REQUEST_URI} [QSA, L]
RewriteCond %{REQUEST_URI} !^/(public|storage/app/public)/
RewriteRule ^ /public%{REQUEST_URI} [QSA, L]

2. Inserisci questo file .htaccess nella cartella storage/app/public/:

storage/app/public/.htaccess

allow from all

Tutto qui

Le cartelle accessibili pubblicamente sono ora:

  • public/
  • storage/app/public/

I loro file possono essere raggiunti come se si trovassero direttamente nella cartella principale /, mentre il resto del progetto Laravel rimane nascosto.

Come piccolo bonus, il poco elegante public/ scompare anche dall’URL.

Decisamente meglio.

Il file .htaccess definitivo ha completato la propria missione.

Un’ultima nota

Durante i test, svuota le cache interessate del browser, del proxy, del CDN o del server. In caso contrario, le vecchie risposte memorizzate potrebbero far sembrare che le nuove regole del .htaccess non siano ancora state applicate.

Verifica inoltre che i file sensibili non siano accessibili direttamente dopo aver attivato la configurazione.

Fidarsi è bene. Testare è meglio.