Il file .htaccess è un piccolo file di testo che vive nella cartella del sito e permette di dare istruzioni al server web senza toccarne la configurazione generale: reindirizzare pagine, proteggere cartelle, bloccare l’accesso a certi file. Sia LiteSpeed sia Apache, i server web che usiamo, lo leggono. È potente, ed è proprio per questo che va maneggiato con un po’ di attenzione: una riga scritta male basta a mandare il sito in errore 500.
In questa guida trovi le regole più utili, spiegate una per una, e le precauzioni per usarle senza sorprese.
Dove si trova e come modificarlo
Il .htaccess principale sta nella cartella public_html del dominio. Il punto iniziale nel nome lo rende un file “nascosto”: se non lo vedi, abilita la visualizzazione dei file nascosti nel tuo client FTP (in FileZilla: menu Server, voce per forzare la visualizzazione dei file nascosti) o usa il file manager del pannello.
Le regole valgono per la cartella in cui si trova il file e per tutte le sottocartelle. Puoi quindi avere un .htaccess diverso in una sottocartella, ad esempio per proteggerla.
Tre precauzioni prima di iniziare
- Fai una copia del file prima di modificarlo, ad esempio scaricandolo sul computer.
- Aggiungi una regola alla volta e controlla il sito dopo ognuna.
- Non toccare i blocchi del CMS. WordPress scrive le sue regole fra
# BEGIN WordPresse# END WordPress; PrestaShop ha un blocco simile. Metti le tue regole prima di questi blocchi, mai in mezzo: il CMS potrebbe riscriverli e cancellare le tue modifiche.
Se qualcosa va storto, rimetti la copia. E se la copia non ce l’hai, JetBackup ha le versioni dei giorni precedenti.
Reindirizzare una pagina spostata (301)
Hai cambiato l’indirizzo di una pagina? Un reindirizzamento permanente porta visitatori e motori di ricerca al nuovo indirizzo, senza perdere il posizionamento:
Redirect 301 /vecchia-pagina/ https://www.tuodominio.it/nuova-pagina/
Per spostare un’intera sezione si usa RedirectMatch con un’espressione regolare:
RedirectMatch 301 ^/blog/(.*)$ https://www.tuodominio.it/notizie/$1
Scegliere fra www e senza www
Il sito deve rispondere a un solo indirizzo “ufficiale”. Per portare tutti alla versione con www:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^tuodominio\.it$ [NC]
RewriteRule ^(.*)$ https://www.tuodominio.it/$1 [R=301,L]
Attenzione: l’indirizzo scelto deve coincidere con quello impostato nel CMS, altrimenti ottieni un ciclo infinito (lo spieghiamo in ERR_TOO_MANY_REDIRECTS). Per il passaggio a HTTPS c’è una guida dedicata: forzare HTTPS.
Proteggere i file sensibili
Alcuni file non devono mai essere scaricabili dal browser, ad esempio file di configurazione, copie di database o file di log lasciati per sbaglio nella cartella pubblica. Puoi negare l’accesso per estensione:
<FilesMatch "\.(sql|log|bak|env|ini)$">
Require all denied
</FilesMatch>
Per WordPress è utile proteggere il file di configurazione:
<Files wp-config.php>
Require all denied
</Files>
Meglio ancora, però, è non lasciare copie di database e archivi dentro public_html: cancellali appena non servono più.
Disattivare l’elenco dei file
Se in una cartella manca il file index, alcuni server mostrano l’elenco di tutti i file contenuti. Per impedirlo:
Options -Indexes
Impedire l’esecuzione di PHP nella cartella dei caricamenti
La cartella in cui il CMS salva le immagini (in WordPress wp-content/uploads) non dovrebbe mai contenere script eseguibili. Un .htaccess dentro quella cartella con questa regola blocca l’esecuzione di eventuali file PHP caricati da un malintenzionato:
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
Prima di applicarla, verifica che nessun plugin abbia bisogno di eseguire file PHP in quella cartella (è raro, ma succede).
Bloccare un indirizzo IP
Per escludere un singolo IP molesto:
<RequireAll>
Require all granted
Require not ip 203.0.113.45
</RequireAll>
Usala con parsimonia: gli attacchi veri arrivano da migliaia di indirizzi diversi e si fermano meglio a monte. Da noi lo fanno già Security Intelligence e il firewall di cPGuard. Inoltre, se il sito è sotto la rete iWebLab Edge, l’IP che il server vede non è sempre quello del visitatore: in quel caso un blocco per IP nel .htaccess potrebbe non funzionare come ti aspetti. Se devi bloccare qualcuno, chiedici con un ticket.
Pagine d’errore personalizzate
Invece della pagina standard puoi mostrare una tua pagina, coerente con la grafica del sito:
ErrorDocument 404 /pagina-non-trovata.html
I CMS come WordPress gestiscono già il 404 con il tema, quindi questa regola serve soprattutto per siti statici.
Proteggere una cartella con password
Per un’area riservata semplice (ad esempio una cartella di documenti da condividere con pochi collaboratori) si usa l’autenticazione di base, che richiede un file di password separato. DirectAdmin offre una funzione per creare cartelle protette da password senza scrivere regole a mano: è la strada più sicura, perché crea il file delle password fuori dalla cartella pubblica.
Cosa non mettere nel .htaccess
- Regole copiate senza capirle. Molte guide in rete sono pensate per configurazioni diverse dalla tua.
- Impostazioni di PHP come
php_value memory_limit: a seconda del piano e del modo in cui PHP viene eseguito, possono essere ignorate o causare un errore 500. Per i limiti di PHP leggi la guida su memory_limit e upload. - Regole di cache aggressive scritte a mano, se usi già un sistema di cache: rischi di servire contenuti vecchi. Con iWebLab Cache è il plugin a occuparsene.
Se il sito va in errore 500
Rinomina il .htaccess (ad esempio in .htaccess-off) e ricarica il sito: se torna a funzionare, il problema era lì. Rimetti la copia buona o reinserisci le regole una alla volta. In WordPress, salvando di nuovo i permalink il CMS ricrea il suo blocco di regole.
Per dubbi su una regola specifica, apri un ticket dall’area clienti e incolla il contenuto del file.