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

  1. Fai una copia del file prima di modificarlo, ad esempio scaricandolo sul computer.
  2. Aggiungi una regola alla volta e controlla il sito dopo ognuna.
  3. Non toccare i blocchi del CMS. WordPress scrive le sue regole fra # BEGIN WordPress e # 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.

Altri articoli su FTP e gestione dei file

Parliamone

Un hosting che ti spiega le cose, e poi le fa

Questi articoli nascono dalle domande dei nostri clienti. Se vuoi un hosting dove dietro ogni risposta c’è un tecnico vero, parliamone.

  • 4,9 su 5 su Trustpilot264 recensioni, il 96% a cinque stelle
  • Risponde un tecnicoIn italiano, da chi gestisce i server
  • Il trasloco lo facciamo noiSito, database e posta, controllati prima di spostare i DNS