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:
-
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). -
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
AllowOverridea "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.
- Articolo precedente L'oggetto XMLHttpRequest
- Articolo successivo Antispam per moduli e blog. Bloccare lo spam con Akismet e PHP
Ti potrebbe interessare anche
commenta la notizia
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