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.

Consigli

  • 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.
  • Se potete amministrare direttamente Apache, il comando apachectl configtest resta il controllo sintattico più affidabile. Questo strumento è pensato per i casi in cui non sia disponibile, come i serventi condivisi.
  • 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.

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.