Christian Castelli
a- a+

Introduzione al file .htaccess: a cosa serve?

Cosa sono e come si usano i files .htaccess

Introduzione

I files .htaccess (o "files di configurazione distribuita") sono dei files di testo che forniscono un meccanismo di configurazione a livello di directory. Tali files contengono una o più direttive di configurazione e vengono posizionati in una particolare directory del file system del server (Apache ovviamente). Le direttive contenute in tali files verranno applicate solo alla directory di appartenenza e a tutte le sue sottodirectory.

E' possibile cambiare il nome di tali files di configurazione (invece del nome di default .htaccess)  ad esempio con .config (o un altro nome più fantasioso). Questo è possibile usando la direttiva AccessFileName. Come esempio potete mettere tale codice nel file di configurazione del server (httpd.conf):

AccessFileName .config

Ma quante direttive possiamo usare in questi files? A questa domanda risponde la direttiva AllowOverride. Questa direttiva specifica quali direttive verranno eseguite se incontrate in un file .htaccess. Se una direttiva è consentita, la documentazione per tale direttiva conterrà una sezione denominata Override, la quale specificherà quali valori devono esserci in AllowOverride al fine di rendere eseguibile la direttiva inclusa.

Per esempio, se osserviamo la documentazione della direttiva AddDefaultCharset, scopriremo che è permessa la sua inclusione nei files .htaccess osservando il valore presente alla linea Context (in questo caso all, se ci fosse stato server config inece non sarebbe stata permessa la sua inclusione in .htaccess). La linea Override specifica "FileInfo". Per cui bisogna specificare per lo meno "AllowOverride FileInfo" affinchè tale direttiva sia funzionale in un file .htaccess.

Esempio:

Context: server config, virtual host, directory, .htaccess
Override: FileInfo

Se non si è sicuri se una particolare direttiva sia consentita in un file .htaccess, consultare la documentazione per tale direttiva e assicuratevi che alla riga Context ci sia "all" oppure ".htaccess."

Quando usare o meno tali files

In generale non si dovrebbe usare mai i files .htaccess se non si ha accesso al file di configurazione principale del server. Esiste per esempio la convizione predominante che l'autenticazione degli utenti debba essere sempre effettuata attraverso l'ausilio di files .htaccess. Ad ogni modo è possibile inserire la configurazione relativa all'autenticazione degli utenti nel file di configurazione principale del server, tecnica in generale consigliata (si veda la sezione Esempio di autenticazione).

I files .htaccess dovrebbero esser usati nel caso in cui i fornitori di contenuti abbiano bisogno di effettuare delle modfiche alla configurazione principale del server a livello di directory ma non hanno i privilegi amministrativi per accedere al file system del server. Nei casi in cui l'amministratore del server non abbia intenzione di effettuare frequenti cambiamenti di configurazione, sarebbe auspicabile permttere ai singoli utenti di effettuare da soli tali cambiamenti nei files .htaccess. Questo è particolarmente vero nei casi in cui gli ISP ospitino più siti di più utenti su una stessa macchina e desiderino che i loro utenti siano in grado di alterare la loro configurzione.

Ad ogni modo, in generale, l'uso di files .htacess dovrebbe essere evitato quando possibile. Si tenga presente che ogni configurazione inseribile in un file .htaccess può essere tranquillamente messa in una sezione <Directory> nel file di configurazione principale del server.

Ci sono due ragioni principali per evitare l'uso dei files .htaccess:

  1. performance: quando AllowOverride è settata in modo da permettere l'uso di files .htaccess, Apache controllerà in ogni directory se sono presenti tali files. quindi ogni richiesta al server comporta una diminuzione delle prestazioni effettive del server, sia che si usino o meno tali files.
    In oltre si noti che Apache dovrà cercare i files .htaccess in tutte le directory di livello più alto per poter eseguire correttamente le direttive (si veda la sezione Come si applicano le direttive più sotto.). Perciò, se si richiede un file nella directory /www/htdocs/example, Apache dovrà vedere se sono presenti i seguenti files:

    /.htaccess
    /www/.htaccess
    /www/htdocs/.htaccess
    /www/htdocs/example/.htaccess

    Per cui per ogni file acceduto in tale directory, ci sono 4 accessi addizionali al file system, anche se tali files non sono presenti. (si noti che questo vale per l'esempio nel caso in cui i files .htaccess siano stati abilitati per la directory root /, che non è solitamente il caso di fare).
  2. sicurezza: si sta permettendo algli utenti di modificare la configurazione del server, che potrebbe comportare cambiamenti indesiderati. considerare attentamente quali privilegi fornire agli utenti. L'uso di file .htaccess può essere del tutto diabilitato settando la direttiva AllowOverride a "none":
                    AllowOverride None

Come si applicano le direttive

Le direttive di configurazione che si trovano nel file .htaccess vengono applicate nella directory che lo contiene e a tutte le sue sottodirectory. Ad ogni modo è importante ricordare che ci potrebbero essere altri file .htaccess in un livello più alto del file system. Le direttive vengono applicate nell'ordine in cui vengono incontrate, quindi, un file .htacess in una particolare directory potrebbe sostituire le direttive che si trovano in un altro file .htaccess posizionato più in alto nell' albero del file system e così via anche per questo. Esempio:

Nella directory /www/htdocs/example1 abbiamo un file .htaccess che contiene il seguente contenuto:

                    Options +ExecCGI

(nota: bisogna aver settato "AllowOverride Options" per permettere l'uso della direttiva "Options" nei files .htaccess.)

Nella directory /www/htdocs/example1/example2 abbiamo un altro file .htaccess con il seguente contenuto:

                    Options Includes

A causa della presenza di questo secondo file .htaccess, nella directory /www/htdocs/example1/example2, l'esecuzione di scripts CGI non è permessa, poichè è attiva solo Options Includes, che surclassa completamente ogni altro settaggio possa esser stato fatto.

Esempio di autenticazione

Se siete passati direttamente a questa sezione, è importante far notare il pensiero comune che riguarda l'uso forzato di files .htaccess per implementare l'autenticazione tramite password. E' preferibile invece mettere le direttive di autenticazione in una sezione <Directory> nel file di configurazione principale del server.

Premesso ciò, se pensate ancora di avere il bisogno di usare un file .htaccess, considerate la configurazione sottostante (bisogna aver settato "AllowOverride AuthConfig" perchè il tutto funzioni):

contenuto del file .htaccess:

                    AuthType Basic
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins

Fate riferimento a questo tutorial per una discussione più approfondita sull'autenticazione e autorizzazione degli utenti.

Esempio con i Server Side Includes

Un altro uso comune dei files .htaccess è l'abilitazione dei Server Side Includes per una directory particolare. Ciò si può fare con le seguenti direttive messe in un file .htaccess posizionato nella directory desiderata:

                    Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml

Si ricorda che AllowOverride Options e AllowOverride FileInfo devono essere abilitate perchè l'esempio funzioni.

Esempio con script CGI

Infine potremmo voler permettere l'esecuzione di programmi CGI in una particolare directory. Ciò è possibile con il codice seguente:

                    Options +ExecCGI
AddHandler cgi-script cgi pl

Alternativamente se desideriamo che tutti i files nella data directory vengano considerati programmi CGI, ciò è reso possibile con la seguente configurazione:

                    Options +ExecCGI
SetHandler cgi-script

Ricordiamo sempre che AllowOverride Options dev'essere attiva perchè l'esempio funzioni. Per una completa discussione sulla programmazione CGI, si veda questo tutorial.

Debugging

Quando si mettono delle direttive in un file .htaccess e non si ottengono gli effetti desiderati, ci possono essere svariati fattori che possono portare all'errore. Il più comune è che AllowOverride non permette l'uso delle direttive che state usando. Assicurarsi di non aver settato AllowOverride None. Un test per vedere se AllowOverride None è settato o meno è di inserire del testo senza senso nel file .htaccess: se non viene generato un errore interno del server allora probabilmente AllowOverride None è stata specificata.
Dall'altro lato, se otteniamo errori dal server quando cerchiamo di visionare dei documenti, controllate il log degli errori di Apache. Probabilmente vi rivelerà che la directory usata nel vostro file .htaccess non è accettata oppure potrebbe rivelarvi un errore di sintassi.

Ti potrebbe interessare anche

commenta la notizia

Ci sono 1 commenti
ChristianCazzaro
Chi sa dirmi quale codice inserire nel file .htaccess per applicare il redirect 301 per tutti i files contenuti nella cartella escludendo solo alcuni. Io vorrei scrivere in qs file .htaccess solo i file che possono essere visti e non il resto.

Questo perchè uno spammer è entrato nella mia area FTP e ha infettato tutto. Avrò oltre 37.000 files che sono stati indicizzati da Google e che ora mi comunica che non riesce a trovarli nelle varie directory e sottodirectory del sito. Fortunatamente ho cancellato tutto e ho fatto l'upload di tutti i files ma l'errore di PAGINA NON TROVATA me lo comunica lo stesso. Vorrei sapere come fare..

Che codice devo digitare? ad es. vorrei che se uno scrivesse www.miosito.com/it/rosso/sfsdfsf.php (es. di file infetto) andasse su www.miosito.com/it/rosso/
Poi vorrei che se uno scrivesse www.miosito.com/it/rosso/depliant.pdf (es. di file NON infetto) caricasse proprio www.miosito.com/it/rosso/depliant.pdf la stessa cosa per www.miosito.com/it/rosso/index.htm etc.. ossia file non infetti. Insomma un codice che discriminasse i file buoni con il nome del file e con l'estensione. es.: "index.htm" e non "*.htm"

grazie