Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

I file .htaccess in Apache

Breve guida all'uso del file .htaccess: per proteggere le directory con password, per creare messaggi d'errore personalizzati e per configurare PHP
Breve guida all'uso del file .htaccess: per proteggere le directory con password, per creare messaggi d'errore personalizzati e per configurare PHP
Link copiato negli appunti

In quest'articolo vedremo le funzionalità messe a disposizione dai file chiamati .htaccess, file che permettono di utilizzare direttive di apache specifiche le directory, per i file, per la gestione degli errori, per le rewrite rules, per configurare php e per tante altre cose ancora.

Cos'è un file .htaccess

I file .htaccess, che per comodità chiameremo solo htaccess, sono dei semplici file di testo contenenti le direttive di apache per la configurazione. Questi file possono essere editati con un normale editor di testo come notepad o context su windows, mentre su linux, ad esempio, con vi, nano o mcedit.

Come funziona

I file htaccess di apache funzionano in maniera estramente semplice: apache quando riceve una richiesta, prima di eseguirla, verifica se esiste un file htaccess nella cartella del file richiesto o in una cartella precedente, ed in caso lo legge e lo interpreta a run-time e si configura in modo da rispettare le direttive presenti all'interno di quel file.
È molto importante notare che apache ricarica il file ad ogni richiesta in modo non dover essere riavviato in caso di modifiche, com'è invece necessario se viene modificato il file di configurazione principale.

Scope

L'ambito, o lo scope, dei file htaccess si restringe alla cartella nella quale è presente il file.
L'utilizzo di direttive che richiamino, in qualsiasi modo, cartelle precedenti nell'albero delle directory provocherebberò un "Internal Server Error", ovvero un'errore di tipo 500. Lo Scope comprende anche tutte le sotto cartelle ed i relativi file presenti nella cartella principale.

Se si ha una struttura del genere:

directory1
  |
  |- sub-directory1
  |- sub-directory2

tutte le direttive presenti nel file htaccess della directory1 riguarderanno anche le due sub-directory.

È comunque possibile utilizzare la direttiva Directory o Files per limitare le direttive presenti all'interno del file ad una specifica locazione.

Eventuali file htaccess presenti nelle sub-directory della cartella contenete il file con le direttive, avranno una priorità maggiore rispetto all'htaccess principale ed usando quindi questo sistema è possibile annullare eventuali direttive acquisite da un'htaccess presente in una cartella padre.

Direttive Principali

Le direttive più importanti sono:

  • Limit
  • Files
  • Order
  • Deny/Allow

Queste infatti permettono di limitare l'accesso, o di garantirlo, a specifiche cartelle, o files. È anche possibile, sempre tramite queste direttive, dare accesso a specifici indirizzi ip o host.

Se si volesse bloccare l'accesso ad una cartella basterebbe utilizzare la direttiva Order e la direttiva Deny:

Order deny,allow
Deny from all

È importante ricordarsi di scrivere deny,allow o allow,deny, i due parametri della direttva Order, senza spazi altrimenti si riceverà un Internal Server Error.

Per indicare ad apache di applicare delle direttive a uno specifico gruppo di files è possibile usare la direttiva Files:

<Files ~ ".*.jpg$">
    Order deny,allow
    Deny from all
</Files>

Con questo codice si bloccherebbe l'accesso a tutte le immagini jpg presenti nella cartella e nelle sotto-cartelle.

Queste invece permettono di far loggare specifici utenti muniti di un'apposito username e password:

  • AuthUserFile
  • AuthName
  • AuthType
  • Require

Il loro utilizzo permette di abilitare l'accesso ai file e alle directory e sotto-directory presenti nella cartella che contiene il file con le direttive di apache. Utilizzando anche le direttive Files e Directory, insieme a quest'ultime, è possibile dare l'accesso a degli utenti a delle cartelle o file specifici.

Se ad esempio si volesse limitare l'accesso ai file jpeg all'utente pippo basterebbe utilizzare la direttiva Files in accoppiata alla direttiva Require:

AuthName "Titolo della finestra del login"
AuthUserFile /percorso/assoluto/a/.htpasswd
AuthType Basic
Require valid-user
<Files ~ ".*.jpg$">
    Require user pippo
</Files>

L'esempio è estremamente facile da comprendere, infatti la direttiva AuthName, come si può vedere, contiene il titolo che verrà visualizzato nella finestra del login, mentre AuthUserFile contiene il percorso assoluto al file contenente gli utenti. La direttiva AuthType indica la tipologia di autenticazione che apache deve eseguire, e deve rimanere Basic, mentre Require valid-user indica ad apache che alla cartella e alle sotto-cartelle e i file contenti in esse potranno accedere tutti gli utenti indicati nel file degli utenti. Infine la direttiva Files obbliga ad Apache a richiedere l'utente di nome pippo per eseguire la visualizzazione dei file con estensione Jpg.

Per creare i file .htpasswd è possibile utilizzare l'utiliti di apache che ha il medesimo nome e che si trova all'interno della cartella bin, presente nella cartella d'installazione di apache. Su linux, se apache è stato installato tramite un pacchetto precompilato probabilmente è presente nelle path e quindi è possibile eseguirlo direttamente.

Messaggi D'errore Personalizzati

Apache permette di utilizzare dei messaggi d'errore personalizzati con estrema facilita: utilizzando la direttiva ErrorDocument è possibile specificare il testo del messaggio per ogni singolo errore.

ErrorDocument 403 "Accesso negato!"

La direttiva usata in questo modo forzerebbe apache a rispondere con il messaggio "Accesso Negato!" nel caso si verifichi l'errore 403, ovvero Forbidden.

È anche possibile forzare apache ad usare un file contenente una pagina html

ErrorDocument 400 /notfound.html

Possono essere usati anche i file CGI per rendere dinamica la risposta al client, magari in base all'url cercato o alla query string inserita. Per maggiori informazioni sulla gestione degli errori, rimandiamo all'apposita lezione della guida ad Apache di HTML.it.

Configurare PHP

Tramite htaccess è anche possibile configurare PHP per le proprie esigenze in modo da far funzionare applicativi che hanno particolari necessità.

Il modulo di PHP mette a disposizione 2 direttive che servono ad impostare i settaggi presenti nel php.ini:

  • php_flag
  • php_value

La prima direttiva permette di impostare i valori booleani, ovvero TRUE e FALSE, mentre la seconda serve a settare tutti gli altri valori numerici o testuali.

Non è possibile impostare tutti i settaggi di php tramite queste due direttive, all'interno della pagina http://it2.php.net/ini_set.

I settaggi modificabili tramite queste direttive sono quelli segnati come PHP_INI_PERDIR.

Se si volesse impostare la dimensione massima per l'upload dei file si potrebbe usare la direttiva php_value in questo modo:

php_value "upload_max_filesize" "8M"

È anche possibile, ad esempio, aumentare il tempo massimo di esecuzione:

php_value "max_execution_time" "60"

In questo modo il tempo massimo d'esecuzione degli script php verrebbe portato a 60 secondi, invece dei 30 presenti di default.

Se si volesse disabilitare il register_global si potrebbe usare ad esempio

php_flag "register_global"  "0"

Possibili Problemi

Nel caso che i file htaccess non vi funzionino potrebbe essere necessario cercarne la causa all'interno del file di configurazione di apache: esiste una direttiva, AllowOverride, che indica cosa possono e non possono contenere i file htaccess.
Di default questa direttiva è impostata su None e quindi in locale, per ottenere un corretto funzionamento, è necessario impostarla su All.

Ti consigliamo anche