Vai al contenuto
Server e .htaccess

File .htaccess predefinito di WordPress: codice e ripristino

Il codice .htaccess esatto che WordPress scrive per i permalink, cosa fa ogni riga e come ripristinare il file se gli articoli danno 404 ma la home funziona.

Pubblicato

Il file .htaccess predefinito di WordPress è il breve blocco RewriteEngine che il software scrive nel .htaccess alla radice del tuo sito, così permalink come /2026/10/post-name/ funzionano invece di dare 404. Ha questo aspetto:

# BEGIN WordPress
<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

Queste regole vengono dal codice che WordPress usa per generare il blocco e corrispondono alla guida .htaccess di WordPress. WordPress scrive anche tre righe di commento subito dopo # BEGIN WordPress, che avvisano che le modifiche tra i marcatori verranno sovrascritte. Non cambiano il funzionamento delle regole.

In un’installazione in sottocartella, WordPress mette il percorso della sottocartella sia in RewriteBase sia nell’ultima regola, ad esempio RewriteBase /blog/ e RewriteRule . /blog/index.php [L]. Le reti multisito usano un blocco diverso, e per loro WordPress non scrive questo file automaticamente.

I punti chiave

  • WordPress genera questo blocco su Apache e LiteSpeed quando ha i permessi di scrittura e i permalink leggibili sono attivi. Basta aprire Impostazioni > Permalink.
  • Se il file manca o è danneggiato, i permalink danno 404 mentre la home si carica ancora, perché la home non ha bisogno delle regole di rewrite.
  • Qualsiasi cosa aggiunta da te o da un plugin va sopra # BEGIN WordPress, mai dentro i marcatori. WordPress sostituisce tutto ciò che sta tra di essi quando aggiorna il file.
Output di terminale da Apache: senza il file .htaccess la home restituisce 200 e un URL di post restituisce 404; con il blocco predefinito entrambi restituiscono 200
Risposte reali di Apache 2.4.58. Senza il file, la home si carica e l’URL del post restituisce 404. Con il blocco predefinito, entrambi restituiscono 200. Un index.php di prova di una sola riga ha fatto le veci di WordPress.

Cosa fa ogni riga

RewriteEngine On attiva il modulo mod_rewrite di Apache per questa directory; senza questa riga le regole di rewrite sottostanti non fanno nulla.

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] lascia invariato l’URL (è ciò che significa il -) e copia l’header Authorization della richiesta in una variabile del server. WordPress legge quella variabile per ricevere un nome utente e una password inviati nell’header, come una password per le applicazioni.

RewriteBase / imposta il prefisso di percorso che Apache usa per gli URL riscritti. WordPress lo imposta in base a dove si trova il sito, quindi un’installazione in sottocartella riceve RewriteBase /blog/.

RewriteRule ^index\.php$ - [L] è una protezione: se la richiesta è già index.php, il rewrite si ferma e la richiesta passa inalterata.

Le due righe RewriteCond sono la logica vera e propria. %{REQUEST_FILENAME} !-f e !-d chiedono “questa richiesta NON corrisponde a un file reale e NON corrisponde a una directory reale?”. Entrambe devono essere vere perché la regola finale scatti, così un’immagine reale, un file CSS o un PDF caricato vengono serviti direttamente e non toccano mai il routing di WordPress.

RewriteRule . /index.php [L] è ciò che fa funzionare i permalink. Tutto ciò che ha superato le due condizioni viene mandato a index.php, e WordPress decide a quale articolo, pagina o archivio corrisponde l’URL.

Quando WordPress ricrea questo file, e quando no

WordPress svuota le sue regole di rewrite ogni volta che si carica la schermata Impostazioni > Permalink, quindi basta aprirla e non serve cliccare Salva le modifiche. Se .htaccess manca, WordPress lo crea purché la cartella sia scrivibile e i permalink leggibili siano attivi. Se il file esiste ed è scrivibile, WordPress sostituisce il blocco tra i marcatori.

Questo non risolve il problema nei casi seguenti:

  • Il file o la sua cartella non sono scrivibili dall’utente con cui gira PHP. La schermata mostra un errore che dice che il file .htaccess non è scrivibile, insieme alle regole da incollare. Su alcuni hosting PHP gira con un utente di sistema diverso da quello proprietario dei file caricati via FTP, quindi permessi che sembrano corretti in un client FTP possono comunque bloccare WordPress.
  • Sei su nginx. La guida nginx di WordPress dice che nginx non ha un file di configurazione a livello di directory come .htaccess, e WordPress non può cambiare la configurazione del server. L’instradamento equivalente è una direttiva try_files nella configurazione del server, che deve modificare un amministratore.
  • AllowOverride è impostato su None per la directory del tuo sito nella configurazione principale di Apache. La documentazione di Apache dice: “This means .htaccess files are completely ignored unless you explicitly enable them for a directory.” In altre parole, i file .htaccess vengono ignorati del tutto finché non li abiliti esplicitamente per una directory. WordPress può scrivere un file perfetto e non avrà comunque alcun effetto. Le regole di rewrite richiedono AllowOverride FileInfo (o All), e potrebbe doverlo cambiare il tuo host.
  • I tuoi permalink sono impostati su Semplice. Gli URL semplici non hanno bisogno di regole di rewrite, quindi WordPress non crea il file per loro.

Come ripristinarlo a mano

Se articoli e pagine danno 404 mentre la home funziona ancora, un .htaccess mancante o rotto è la prima cosa da controllare. Risolvilo in due passaggi.

1. Prova prima la soluzione a un clic. Apri Impostazioni > Permalink in wp-admin, poi clicca Salva le modifiche senza cambiare nulla. Se WordPress può scrivere il file, questo lo rigenera. Se non può, la schermata mostra l’errore e le regole che ti servono.

2. Se non basta, crea il file a mano. Collegati via FTP/SFTP o con il file manager del tuo host e vai nella cartella radice del sito, che normalmente è quella che contiene wp-admin. Controlla se .htaccess esiste. È un file nascosto, quindi alcuni file manager non lo mostrano di default; attiva “mostra file nascosti”.

  • Se manca, crea un nuovo file chiamato esattamente .htaccess (niente .txt, niente prima del punto).
  • Incolla le regole che WordPress ti ha mostrato, oppure il blocco predefinito all’inizio di questa guida. In un’installazione in sottocartella, adatta RewriteBase e l’ultima regola.
  • Salva, poi ricarica il permalink di un articolo per confermare che funzioni.

Se dà ancora 404, .htaccess potrebbe essere ignorato. Verifica AllowOverride con il tuo host, perché Apache ignora un file corretto quando è disattivato.

Le tue regole e il blocco di WordPress

Un plugin o una modifica manuale possono aggiungere regole proprie, come redirect, protezione hotlink o header di cache. Tienile fuori dal blocco di WordPress e sopra di esso, così vengono eseguite prima della sua regola generale:

# Rules you or a plugin added: ABOVE the WordPress markers
<FilesMatch "\.(jpg|jpeg|png|gif)$">
    # example: hotlink protection, caching rules, etc.
</FilesMatch>

# BEGIN WordPress
<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

Qualsiasi cosa collocata tra # BEGIN WordPress e # END WordPress va persa la prossima volta che WordPress aggiorna il file, e basta caricare la schermata Permalink per provocarlo. Le righe prima e dopo i marcatori vengono conservate. Per i redirect in particolare, vedi regole di redirect .htaccess di WordPress fatte bene per sapere dove devono stare e come evitare i loop.

Un 500 Internal Server Error subito dopo aver modificato il file indica ciò che hai appena cambiato. La documentazione di Apache dice che il log degli errori probabilmente indicherà una direttiva non consentita o un errore di sintassi. Le regole copiate da un vecchio tutorial possono causarlo: Order è un comando non valido su Apache 2.4 a meno che non sia caricato mod_access_compat. Annulla la modifica per riportare online il sito, poi leggi il log degli errori.

Oltre il blocco predefinito

Il blocco predefinito gestisce solo il routing dei permalink e l’header Authorization. Per limitare l’accesso ai file sensibili, ad esempio bloccando l’esecuzione di PHP in /uploads o negando le richieste dirette a wp-config.php, vedi le regole di sicurezza .htaccess di WordPress che aiutano davvero. Se i permalink danno 404 per un altro motivo, come una struttura dei permalink sbagliata, un livello di cache che serve regole vecchie o un conflitto multisito in sottodirectory, i permalink di WordPress che non funzionano ripassa le altre cause.

Domande frequenti

Cos’è il file .htaccess predefinito di WordPress? È il blocco RewriteEngine che WordPress scrive tra # BEGIN WordPress e # END WordPress nel file .htaccess alla radice del sito. Passa l’header Authorization a PHP e manda a index.php qualsiasi richiesta che non corrisponda a un file o una cartella reali.

Qual è il codice esatto del .htaccess predefinito di WordPress? RewriteEngine On, una regola che passa l’header Authorization a PHP, RewriteBase /, una regola di passaggio per index.php, due condizioni che verificano che la richiesta non sia un file o una cartella reali, e una regola finale che manda tutto il resto a index.php. Il blocco completo è all’inizio di questa guida.

Perché tutti i miei articoli danno 404 tranne la home? Un file .htaccess mancante o danneggiato su Apache produce questo schema. Il server trova la home senza regole di rewrite. Ogni altro permalink ha bisogno di quelle regole per arrivare a index.php, quindi senza di esse Apache cerca un file che non esiste e restituisce un 404.

WordPress ricrea .htaccess automaticamente? Sì, su Apache o LiteSpeed con mod_rewrite, se i permalink leggibili sono attivi e WordPress può scrivere lì. Basta aprire Impostazioni > Permalink. Un file mancante richiede una cartella scrivibile, e un file esistente deve essere scrivibile. Altrimenti la schermata mostra un errore insieme alle regole da incollare a mano.

Perché nginx non ha un file .htaccess di WordPress? nginx non ha un file di configurazione a livello di directory come il .htaccess di Apache. Lo stesso instradamento si scrive come regola try_files nella configurazione del server nginx, che deve modificare un amministratore perché WordPress non può cambiarla.

Perché il mio .htaccess si è rotto dopo aver salvato i permalink? Controlla se una regola personalizzata è stata messa dentro i marcatori # BEGIN WordPress e # END WordPress. WordPress sostituisce tutto ciò che sta tra di essi quando aggiorna il file, quindi quella regola va persa. Tieni le regole personalizzate sopra i marcatori.

Fonti


Ricostruisci un .htaccess pulito e corretto, con il blocco permalink predefinito più le regole di sicurezza o redirect che ti servono davvero, usando il generatore .htaccess per WordPress gratuito.

FAQ

Domande

Cos'è il file .htaccess predefinito di WordPress?

È il blocco RewriteEngine che WordPress scrive tra # BEGIN WordPress e # END WordPress nel file .htaccess alla radice del sito. Passa l'header Authorization a PHP e manda a index.php qualsiasi richiesta che non corrisponda a un file o una cartella reali.

Qual è il codice esatto del .htaccess predefinito di WordPress?

RewriteEngine On, una regola che passa l'header Authorization a PHP, RewriteBase /, una regola di passaggio per index.php, due condizioni che verificano che la richiesta non sia un file o una cartella reali, e una regola finale che manda tutto il resto a index.php. Il blocco completo è all'inizio di questa guida.

Perché tutti i miei articoli danno 404 tranne la home?

Un file .htaccess mancante o danneggiato su Apache produce questo schema. Il server trova la home senza regole di rewrite. Ogni altro permalink ha bisogno di quelle regole per arrivare a index.php, quindi senza di esse Apache cerca un file che non esiste e restituisce un 404.

WordPress ricrea .htaccess automaticamente?

Sì, su Apache o LiteSpeed con mod_rewrite, se i permalink leggibili sono attivi e WordPress può scrivere lì. Basta aprire Impostazioni > Permalink. Un file mancante richiede una cartella scrivibile, e un file esistente deve essere scrivibile. Altrimenti la schermata mostra un errore insieme alle regole da incollare a mano.

Perché nginx non ha un file .htaccess di WordPress?

nginx non ha un file di configurazione a livello di directory come il .htaccess di Apache. Lo stesso instradamento si scrive come regola try_files nella configurazione del server nginx, che deve modificare un amministratore perché WordPress non può cambiarla.

Perché il mio .htaccess si è rotto dopo aver salvato i permalink?

Controlla se una regola personalizzata è stata messa dentro i marcatori # BEGIN WordPress e # END WordPress. WordPress sostituisce tutto ciò che sta tra di essi quando aggiorna il file, quindi quella regola va persa. Tieni le regole personalizzate sopra i marcatori.