Verifica sintattica del file .htaccess

Basta incollare il contenuto del file .htaccess per rilevare all'istante gli errori più tipici: blocchi non chiusi, nomi di direttiva sbagliati, argomenti mancanti nelle regole di riscrittura e condizioni rimaste senza regola.

Trovare gli errori in un file .htaccess

Un .htaccess è un file nel quale un solo carattere sbagliato può mettere a terra un intero sito con un errore 500. Incollatene il contenuto e questo strumento coglie sul momento gli errori tipici: un tag di blocco non chiuso, un nome di direttiva scritto male, un RewriteRule a corto di argomenti, un RewriteCond rimasto isolato.

Ciò che qui si controlla è la sintassi, non se il file faccia quel che intendevate. Una regola di riscrittura può essere formata in modo impeccabile e tuttavia non condurre nessuno all'indirizzo che avevate in mente, se le condizioni vengono nell'ordine sbagliato. Due particolari della specifica meritano inoltre di essere noti. Il primo: un RewriteCond si applica soltanto al RewriteRule che lo segue immediatamente, sicché elencare più condizioni e porre un'unica regola in fondo semplicemente non funziona. Il secondo: se AllowOverride è disabilitato nella configurazione del server, l'.htaccess non viene mai letto. Quando nulla accade nonostante quanto avete scritto, sospettate della configurazione del server prima che del file.

Come si usa

  1. Incollate il contenuto del vostro .htaccess Inserite l'intero file così com'è.
  2. Provate prima gli esempi Sono forniti un esempio valido e uno che contiene errori.
  3. Leggete le righe segnalate I tag non chiusi e gli argomenti mancanti vengono riferiti con il loro numero di riga.
  4. Controllate la configurazione del server se nulla agisce Se AllowOverride è disabilitato, il file non viene letto.

Consigli per sfruttarlo al meglio

  • Questa verifica è un'analisi statica euristica riga per riga e non un vero analizzatore di Apache. Prima di applicare le modifiche, provate sempre su un servente reale o su un ambiente di prova.
  • Il comando apachectl configtest (httpd -t) controlla solo i file di configurazione principali letti all'avvio; i file .htaccess vengono letti a ogni richiesta e quindi non sono controllati. Gli errori di un .htaccess compaiono nel registro degli errori quando quella cartella viene effettivamente richiesta. Questo strumento serve come controllo preliminare.
  • L'avviso sugli errori di digitazione nei nomi delle direttive è una supposizione di bassa attendibilità, fondata su un elenco di riferimento: usando direttive di moduli poco diffusi, l'avviso può comparire anche se la scrittura è corretta.
  • È consueto accumulare più condizioni di riscrittura in righe consecutive: l'avviso compare soltanto quando all'ultima di esse non segue alcuna regola.
  • Prima di caricare in produzione conviene applicare le modifiche a poco a poco e verificare per gradi che non incidano sul funzionamento esistente.

Quando torna utile

Nel verificare prima della pubblicazione

Un errore nell'.htaccess abbatte l'intero sito, il che rende la verifica preventiva ampiamente conveniente.

Nell'aggiungere a un insieme di regole di riscrittura

Dopo aver aggiunto una condizione a regole esistenti, potete vedere se la forma ha tenuto.

Nel decifrare una configurazione ereditata

In un file a lungo integrato, potete stabilire se qualche parte abbia cessato di agire.

Nel circoscrivere un errore 500

Un errore di sintassi nel .htaccess non ferma il server: è quella cartella a restituire un errore 500. Potete stabilire per prima cosa se la causa del 500 sia la sintassi.

Termini dell'.htaccess

RewriteEngine
La direttiva che abilita la riscrittura. A meno che non sia posta a On, nessuna delle regole seguenti agisce.
RewriteCond
Una condizione su una riscrittura. Si applica soltanto al RewriteRule che la segue immediatamente, il che conviene tenere a mente.
RewriteRule
La regola di riscrittura vera e propria, che prende un modello, una sostituzione e flag come [L,QSA].
Flag
Le impostazioni fra parentesi quadre dopo una regola. L arresta qui l'elaborazione e QSA riporta la stringa di ricerca.
Tag di blocco
Un racchiudimento come <IfModule> o <Files>. Lasciarne uno non chiuso produce un errore 500.
AllowOverride
L'impostazione lato server che decide quali direttive un .htaccess possa usare. Là dove è disabilitata, il file non viene letto.

Domande frequenti

La causa più frequente è che nella configurazione di Apache la sovrascrittura sia disattivata e il contenuto del file venga quindi ignorato del tutto. Occorre chiedere all'amministratore di abilitare la sovrascrittura, in tutto o per le voci necessarie. Verificate anche che non resti memorizzata una versione precedente nel navigatore o nella rete di distribuzione dei contenuti.

La forma è RewriteRule schema destinazione [contrassegni], con tre elementi. Lo schema è un'espressione regolare che si confronta con il percorso richiesto, senza la barra iniziale, e nella destinazione si possono richiamare i gruppi fra parentesi con $1 e simili. I contrassegni si indicano fra parentesi quadre separati da virgole, per esempio [L] per interrompere l'elaborazione delle regole successive o [R=301] per un reindirizzamento permanente.

Tipicamente perché l'indirizzo riscritto corrisponde di nuovo allo stesso schema e Apache ripete la riscrittura. La soluzione consueta è anteporre una condizione che interrompa l'elaborazione quando il percorso o il file esistono davvero, per esempio %{REQUEST_FILENAME} !-f, che si applica soltanto quando il file non esiste.

In molti ambienti di ospitalità condivisa tutte le pagine sotto quella cartella cominciano a restituire un errore interno del servente. Poiché il registro degli errori, se accessibile, riporta il numero di riga e la descrizione, consultarlo è la via più rapida per risolvere.

No, non c'è garanzia. Si tratta di un controllo statico euristico basato su espressioni regolari riga per riga, che non riproduce integralmente il comportamento del vero analizzatore di Apache. Che i moduli necessari siano caricati e che una direttiva sia ammessa in quel contesto dipende dall'ambiente: provate sempre su un ambiente di prova o sul servente reale.
Tool-kun

A proposito — perché si chiama .htaccess

Il nome .htaccess è l'abbreviazione di «accesso all'ipertesto» e risale ai primi servienti web della metà degli anni Novanta e alle prime versioni di Apache. In origine serviva a impostare l'autenticazione con parola d'ordine cartella per cartella e fu concepito perché il titolare di ciascuna cartella potesse sovrascrivere le impostazioni del proprio ambito senza che l'amministratore dovesse toccare il file di configurazione principale.

La forza del file sta nel fatto che, purché Apache lo consenta con l'apposita direttiva, basta caricarlo via trasferimento file o dal gestore di file perché le impostazioni abbiano effetto immediato. Anche chi, in un ambiente di ospitalità condivisa, non ha alcun accesso al file di configurazione del servente può così governare nel dettaglio reindirizzamenti, memorizzazione e restrizioni d'accesso cartella per cartella.

Questa comodità ha però un prezzo. La documentazione ufficiale di Apache afferma esplicitamente che, avendo accesso ai file di configurazione del servente, conviene scrivere lì anziché nel .htaccess. La ragione è semplice: a ogni richiesta Apache rilegge il file risalendo dalla cartella interessata fino alla radice, con un costo non trascurabile rispetto alla configurazione principale.

Inoltre un errore di sintassi provoca, in molti ambienti condivisi, un errore interno del servente su tutta la cartella, con una pagina bianca e non poco tempo perso a individuarne la causa. Affiancare alla lettura a vista un controllo statico come questo aiuta a prevenire incidenti dovuti a semplici distrazioni.