.htaccess per WordPress: i 10 snippet più utili (con generatore)
Ogni guida tecnica su WordPress prima o poi dà per scontato che tu sappia cosa mettere nel .htaccess, e quasi nessuna ti mostra il codice esatto. Qui trovi spiegato che cos'è questo file, che cosa non devi toccare mai e quali sono i dieci snippet che si usano davvero sui siti in produzione.
Prima o poi ci finisci dentro: un tutorial ti dice di incollare tre righe nel .htaccess e si ferma lì, senza spiegare dove sia quel file né cosa succede se sbagli una parentesi. Questo articolo mette in fila i dieci snippet di .htaccess per WordPress che si usano davvero sui siti in produzione, uno per uno, con il codice esatto e il motivo per cui vale la pena aggiungerlo. Se preferisci non scrivere niente a mano, puoi comporre l'intero file in pochi clic con il nostro generatore di .htaccess gratuito.
Che cos'è il file .htaccess
Il .htaccess è un file di configurazione in testo semplice che vive nella cartella principale della tua installazione di WordPress, allo stesso livello di wp-config.php. Il server web lo legge a ogni richiesta e ti permette di cambiare comportamenti come redirect, cache o intestazioni HTTP senza toccare la configurazione globale del server e senza riavviare niente. Sull'hosting condiviso è spesso l'unica leva che il provider ti lascia in mano.
C'è però un dettaglio che quasi nessuna guida mette in chiaro: il .htaccess funziona solo su Apache e, per le direttive più comuni, su LiteSpeed, che le interpreta in modo compatibile. Se il tuo hosting gira su Nginx, questo file non viene nemmeno letto: le stesse regole vanno scritte nel blocco server di nginx.conf, con una sintassi diversa. L'hosting condiviso pensato per WordPress gira in genere su Apache o LiteSpeed, ma il tipo di server resta la prima cosa da verificare. Di solito lo trovi nel pannello dell'hosting, tra le informazioni tecniche del piano; in caso di dubbio bastano due righe al supporto.
Il blocco che WordPress gestisce da solo
Se apri il .htaccess di un'installazione con i permalink parlanti attivi, all'inizio del file trovi un blocco come questo:
# BEGIN WordPress
# Le direttive (righe) tra "BEGIN WordPress" e "END WordPress" sono
# generate dinamicamente e vanno modificate solo tramite i filtri di WordPress.
# Qualsiasi modifica alle direttive tra questi marcatori verrà sovrascritta.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Sono le righe che fanno arrivare a index.php ogni indirizzo che non corrisponde a un file o a una cartella reale, ed è la base dei permalink come /blog/mio-articolo/ al posto di /?p=123. WordPress riscrive quel blocco ogni volta che salvi le impostazioni dei permalink, quindi una modifica fatta a mano lì dentro può sparire senza preavviso. La regola è semplice: tutto quello che aggiungi tu va fuori dal blocco, di solito subito prima di # BEGIN WordPress.
Componilo in pochi clic: generatore gratuito di .htaccess
Spunti i moduli che ti servono, HTTPS, cache, GZIP, header di sicurezza, redirect, e ottieni un file già commentato da copiare o scaricare. Gira tutto nel browser, non viene caricato niente su nessun server.
I 10 snippet .htaccess più utili per WordPress
Tutti gli snippet che seguono vanno fuori dal blocco # BEGIN WordPress, di solito subito sopra. Puoi copiarli uno alla volta oppure farteli assemblare tutti insieme dal generatore di .htaccess per WordPress, che tiene anche l'ordine giusto quando ne combini parecchi.
1. Forzare HTTPS
Ogni richiesta su http:// finisce in modo permanente (301) sulla versione https://, senza dipendere dal fatto che ogni link interno sia già stato aggiornato. Serve ovviamente un certificato SSL attivo. Controlla prima se il tuo provider forza già HTTPS lato server: in quel caso questa regola aggiungerebbe solo un secondo salto inutile.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
2. Unificare www e senza www
Per Google www.iltuosito.it e iltuosito.it sono due indirizzi diversi. Senza una regola chiara, backlink e segnali di posizionamento si dividono fra le due varianti. Questo snippet porta la versione con www su quella senza; se preferisci il contrario, inverti la condizione.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ %{REQUEST_SCHEME}://%1%{REQUEST_URI} [L,R=301]
</IfModule>
3. Redirect 301 fissi
Per uno spostamento singolo e definitivo basta una riga per regola. Quando i redirect diventano qualche decina, però, il file si trasforma in un elenco illeggibile e un errore di battitura in una riga diventa difficile da trovare. Se ne gestisci molti, un plugin è più maneggevole del file: il confronto è in alternativa a Redirection con Linkjet.
<IfModule mod_alias.c>
# Porta il vecchio percorso sul nuovo indirizzo
Redirect 301 /vecchia-pagina https://iltuosito.it/nuova-pagina
</IfModule>
4. Cache del browser
File statici come CSS, immagini o font cambiano di rado, quindi il browser può tenerseli invece di richiederli a ogni visita. L'HTML è volutamente escluso dalla cache, con 0 secondi, perché i contenuti cambiano di continuo. È anche il punto che PageSpeed Insights segnala quando chiede una politica di cache efficace per le risorse statiche.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
ExpiresByType image/webp "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType font/woff2 "access plus 1 year"
</IfModule>
5. Compressione GZIP
I file di testo si comprimono spesso fra il 60 e l'80 per cento prima di partire verso il browser. L'effetto si sente soprattutto su CSS e JavaScript di una certa dimensione, e al server costa pochissimo tempo di calcolo.
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml
AddOutputFilterByType DEFLATE application/javascript application/x-javascript
AddOutputFilterByType DEFLATE application/json application/xml
AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
6. Header di sicurezza
Quattro intestazioni HTTP che riducono la superficie di attacco senza installare nessun plugin: impediscono al browser di indovinare il tipo di file (nosniff), bloccano il caricamento del tuo sito dentro un iframe altrui, limitano i dati passati nel referrer e disattivano l'accesso a geolocalizzazione, microfono e fotocamera. L'header HSTS, invece, attivalo solo quando HTTPS funziona in modo affidabile su tutto il sito: i browser se lo ricordano per mesi e tornare indietro in fretta è quasi impossibile.
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
</IfModule>
7. Pagina 404 personalizzata
Con i permalink parlanti attivi, quasi ogni indirizzo sbagliato arriva comunque a WordPress e finisce sul template 404 del tema. Questa riga serve per i casi in cui WordPress non entra mai in gioco, per esempio quando mod_rewrite è disattivato o il blocco dei permalink manca: lì risponde il server, e senza ErrorDocument mostra la sua pagina di errore scarna.
ErrorDocument 404 /404.html
8. Protezione dall'hotlinking
Se un altro sito richiama le tue immagini con un tag <img>, la banda la paghi tu senza ricevere neanche una visita. Questa regola lascia passare le richieste che arrivano dal tuo dominio o senza referrer, per esempio dai preferiti, e blocca il resto. Sostituisci iltuosito.it con il tuo dominio reale.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?iltuosito\.it [NC]
RewriteRule \.(jpe?g|png|gif|webp|svg)$ - [F,NC,L]
</IfModule>
9. Disattivare l'elenco delle cartelle
Senza questa riga, chi apre nel browser una cartella priva di index.php o index.html, per esempio una vecchia /uploads/2023/, può ritrovarsi davanti l'elenco completo dei file. Una riga chiude la porta.
Options -Indexes
10. Bloccare i dotfile
File come .env, .git o un .htpasswd dimenticato non dovrebbero essere raggiungibili dal browser, eppure finiscono nella cartella pubblica più spesso di quanto immagini. Questa regola blocca tutto ciò che inizia con un punto, con un'eccezione voluta per .well-known, che serve per esempio alla convalida dei certificati SSL.
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/" [NC]
RewriteRule "(^|/)\." - [F]
</IfModule>
Come provare le modifiche senza rischiare il sito
Aggiungi gli snippet uno alla volta, mai tutti in blocco, e ricarica il sito dopo ogni salvataggio. Se qualcosa si rompe sai già quale riga guardare, senza dover rileggere l'intero file. Se il tuo hosting offre un ambiente di staging, è il posto giusto per la prima prova. E se non hai voglia di maneggiare la sintassi a mano, il generatore di .htaccess ti restituisce un file già commentato e coerente, pronto da copiare o da scaricare.
Componilo in pochi clic: generatore gratuito di .htaccess
Dieci moduli, descrizioni in italiano e un'anteprima che si aggiorna mentre spunti le caselle. Niente sintassi da ricordare e niente file caricati da qualche parte: il risultato nasce e resta nel tuo browser.
In conclusione
Un .htaccess curato non richiede competenze di programmazione, richiede attenzione: copia di sicurezza prima di ogni modifica, mani lontane dal blocco fra i marcatori BEGIN e END, e un controllo del sito subito dopo aver salvato. Dieci snippet coprono quasi tutto quello che si chiede a questo file nella vita normale di un sito WordPress: indirizzi puliti, qualche millisecondo in meno di attesa e un paio di porte chiuse a chi passa a curiosare.
Redirect senza toccare il server
Se del .htaccess ti servono soprattutto i redirect 301, Linkjet te li dà dalla bacheca di WordPress: cinque tipi di codice di stato, monitor 404 e statistiche sui clic che restano sul tuo server, tutto già nella versione gratuita.
Domande frequenti
Che cos'è il file .htaccess in WordPress?
È un file di configurazione in testo semplice che si trova nella cartella principale della tua installazione e che il server web legge a ogni richiesta. Permette di definire redirect, cache, header di sicurezza e altre regole senza toccare la configurazione globale del server. Funziona solo su server Apache e, in modo compatibile, su LiteSpeed.
Il .htaccess funziona anche su Nginx?
No. Nginx non legge i file .htaccess in nessun caso, nemmeno se lo copi nella cartella principale del sito. Le stesse regole, cioè redirect, cache e header, vanno scritte direttamente nel blocco server di nginx.conf, con una sintassi diversa da quella di Apache. Se non sai su quale server gira il tuo sito, chiedilo al provider prima di applicare questi snippet.
Dove si trova il file .htaccess e perché non lo vedo?
Sta nella cartella principale dell'installazione, quella in cui vedi anche wp-admin e wp-config.php. Il nome inizia con un punto, quindi molti client FTP e gestori file dell'hosting lo nascondono per impostazione predefinita: cerca un'opzione tipo mostra file nascosti. Se il file non esiste affatto, di solito basta salvare una volta le impostazioni dei permalink in WordPress perché venga creato.
Che cosa succede se sbaglio una riga nel .htaccess?
Un errore di sintassi, per esempio un tag non chiuso o una direttiva scritta male, può far cadere l'intero sito con un errore 500 visibile a chiunque, non solo la pagina su cui stavi lavorando. Per questo conviene salvare sempre una copia del file prima di toccarlo: se qualcosa va storto, ricaricare la copia via FTP risolve in pochi secondi.
Come creo un .htaccess per WordPress senza scrivere codice?
Il generatore gratuito di hafenstudios compone il file al posto tuo: spunti i moduli che ti servono, per esempio HTTPS forzato, unificazione del www, redirect 301, cache, GZIP, header di sicurezza o protezione dall'hotlinking, e a fianco compare un file già commentato da copiare o scaricare. Gira tutto nel browser, niente viene trasmesso a un server. Vale comunque la regola di sempre: prima di sostituire il .htaccess esistente, salvane una copia.
Se quello che ti serve davvero sono i redirect, il confronto completo è in alternativa a Redirection. E se quello che gestisci sono link di affiliazione mascherati, la guida è alternativa a Pretty Links.