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

Personalizzare la visualizzazione delle directory con mod_autoindex di Apache

Tutti i sistemi, i trucchi e gli esempi per personalizzare la visualizzazione dei file delle directory di Apache
Tutti i sistemi, i trucchi e gli esempi per personalizzare la visualizzazione dei file delle directory di Apache
Link copiato negli appunti

Capita a tutti, prima o poi, di voler rendere disponibili ai visitatori del proprio sito alcuni file. Comunemente si utilizza il linguaggio lato server preferito per costruire un'apposita area download, che elenchi i contenuti e permetta di scaricarli. Esiste però un'alternativa: sfruttare alcune funzionalità fornite dal web server Apache, senza scrivere una riga di codice. Ciò che ci proponiamo di realizzare non vuole essere particolarmente complesso, ma neppure banale. Dobbiamo poter elencare alcune caratteristiche dei nostri file come nome, data, dimensione, ordinare l'elenco in base a diversi criteri ed anche filtrarlo. Il modulo mod_autoindex, compilato di default, permette di generare il listato dinamico di una particolare directory. Esso esegue una sorta di 'ls' o 'dir' se preferite, però possiamo agire sulle configurazioni per personalizzare l'aspetto dell'output.

Cosa succede quando digitiamo un indirizzo come http://www.miosito.it oo http://www.miosito.it/docs? Normalmente entra per primo in azione il modulo mod_dir il quale, in base alla direttiva DirectoryIndex, cerca nella directory specificata uno tra i file enumerati e lo fornisce al navigatore. Ad esempio con la seguente configurazione:

DirectoryIndex index.html index.php index.htm benvenuto.html

Apache verifica nell'ordine la presenza di tali file ed il primo trovato viene inviato al browser. Se nessuno dei quattro file esiste il web server può reagire in modo diverso a seconda della configurazione adottata. In particolare attraverso la direttiva Options possiamo determinare quali caratteristiche siano attive nella directory richiesta. La situazione più drastica e più sicura prevede:

<Directory /path_to_myweb/docs>
  Options None
</Directory>

In tal caso il tentativo di accesso ci procurerà un bel messaggio FORBIDDEN, se però modifichiamo la configurazione così:

<Directory /path_to_myweb/docs>
  Options Indexes
</Directory>

abilitiamo l'elencazione automatica dei contenuti della directory. Il web server ci fornirà una pagina dal titolo Index of /docs tra tag <h1> ed un elenco puntato con la lista dei file. Facile vero?....Il risultato è un po' deludente? Niente paura, da qui in avanti ci occuperemo di migliorare e personalizzare la visualizzazione standard.

Usiamo l'immaginazione

Come primo passo abilitiamo, mediante la direttiva IndexOptions, il FancyIndexing che ci darà subito un'iniezione di "fantasia".

  IndexOptions FancyIndexing

Al reload della pagina la situazione risulta molto migliorata: ora i file compaiono come siamo abituati a vederli con i comuni file manager (Nautilus, Esplora Risorse, Konqueror, etc.). Le intestazioni di colonna: Name, Last modified, Size, Description sono dei link che permettono di ordinare l'elenco in base ai valori contenuti. Click successivi sulla medesima colonna ci permetteranno di applicare alternativamente un ordinamento crescente o decrescente. Accanto a ciascun file compare un'iconcina rappresentativa del tipo di file. Tali icone vengono gentilmente fornite da Apache e si trovano nella directory icons (/var/www/icons ad esempio). A breve vedremo come personalizzarle ed anche come corredare i file con una descrizione, per ora probabilmente vuota. Completiamo l'impostazione generale con un po' di opzioni:

  IndexOptions FancyIndexing HTMLTable FoldersFirst NameWidth=* VersionSort
  • HTMLTable: utilizza una tabella html per rappresentare l'elenco, disponibile dalla versione 2.0.23;
  • FoldersFirst: elenca prima le directory e poi i file anziché mescolarli, disponibile dalla versione 2.0.23;
  • NameWidth=*: adatta la colonna che riporta i nomi dei file alla larghezza necessaria;
  • VersionSort: ordina i nomi contenenti numeri di versione in modo corretto; ad esempio seguendo l'ordinamento alfabetico crescente miofile-1.3.2 verrebbe elencato dopo miofile-1.3.12 che rappresenta una versione successiva.

Queste sono solo alcune delle possibili opzioni per le altre potete riferirvi alla documentazione ufficiale.

Ancora un'osservazione importante: non è detto che vogliamo mostrare ai visitatori tutti i file presenti nella directory. La direttiva IndexIgnore ci permette di escluderne alcuni elencandoli per nome o tramite wildcard:

IndexIgnore miofile.txt .htaccess *.gif

Passiamo ora ad aspetti più estetici che sostanziali, nei prossimi paragrafi vedremo come modificare icone, descrizioni e pagina.

Cambiamo le icone

Come già accennato Apache fornisce un buon numero di icone che però potrebbero non piacerci. Per sostituirle con altre di nostro gradimento disponiamo di una serie di utili direttive. In primo luogo predisponiamo la cartella con le nostre immagini, negli esempi seguenti ho creato la directory myicons allo stesso livello di quella di default, icons, ed ho aggiunto un alias nell'httpd.conf:

Alias /myicons/ "/path_to_dir/myicons/"

Ora vediamo le direttive:

AddIcon /myicons/image.gif .gif .jpg
AddIcon /myicons/dir.gif ^^DIRECTORY^^  

AddIconByEncoding /myicons/zip.gif x-gzip

AddIconByType /myicons/html.gif text/html

DefaultIcon /myicons/unknown.gif

La prima, AddIcon, permette di assegnare le icone ai file specificati. Nel secondo esempio la utilizziamo per impostare l'immagine che rappresenta le cartelle. AddIconByEncoding, come si evice dal nome, permette di associare le icone alle codifiche MIME (mime-encoding) dei file. AddIconByType permette di assegnare le icone ai tipi MIME (mime-type), potremmo usarla anche per gruppi di encoding cosí text/*. In caso di mancata corrispondenza DefaultIcon fornirà l'icona generica unknown.gif da noi predisposta.

Aggiungiamo i testi alternativi e le descrizioni

Sempre sulla falsariga degli esempi precedenti vediamo come aggiungere i tag alt alle icone che compaiono accanto ai file, buona norma di accessibilità:

AddAlt "file open office" *.odt
AddAlt Compressi *.gz *.zip

AddAltByType 'pagine html' text/html

AddAltByEncoding Compressi x-gzip

Se la stringa descrittiva contiene spazi dobbiamo includerla tra singoli o doppi apici. Un'accortezza: la definizione degli alt deve precedere quella delle icone perché tutto funzioni correttamente, quindi le ultime direttive vanno definite prima delle precedenti.

Completiamo il tutto con l'aggiunta di un testo descrittivo accanto ai file o gruppi di file. Questo permette di fornire ulteriori informazioni a chi consulta l'area download.

AddDescription 'miei documenti personali' *.odt
AddDescription "la mia foto" ermanno.jpg

Modifichiamo il layout della pagina

La domanda che tutti sicuramente vi siete posti dall'inizio dell'articolo è: posso manipolare la pagina generata da Apache per integrarla nel layout del mio sito? La risposta viene fornita da due direttive HeaderName e ReadmeName che permettono di includere un file rispettivamente prima e dopo il listato della directory. Predisponiamo ad esempio due file: top.html e bottom.html contenenti il codice html necessario alla personalizzazione. In top.html inseriamo tutta la parte iniziale della nostra pagina a partire dalla definizione del DOCTYPE, compresa l'inclusione di fogli di stile e tutto ciò che ci può essere utile per uniformarla con il resto del sito. In bottom.html inseriamo la parte finale della nostra pagina chiudendo i tag body e html ed il gioco è fatto.

ReadmeName /include/bottom.html
HeaderName /include/top.html

Il percorso specificato per i file inclusi viene considerato relativo alla directory elencata ma, se comincia con una slash, sarà ritenuto relativo alla DocumentRoot.

Per evitare che ci sia una duplicazione dei tag iniziali (che vengono generati automaticamente da Apache) completiamo la direttiva IndexOptions aggiungendo SuppressHTMLPreamble. Infine se decidiamo di creare i file di intestazione e chiusura direttamente nella directory che verrà elencata ricordiamoci di nasconderli con IndexIgnore.

E la ricerca?

Adesso manca solo una funzione di ricerca/filtro per sentirci soddisfatti. Se avete cominciato a giocare con il mod_autoindex vi sarete accorti che, quando clicchiamo su un'intestazione di colonna, la query string che compare nella barra dell'indirizzo ci segnala il passaggio di alcuni parametri via GET.

Osservandoli con attenzione o, più semplicemente, consultando la documentazione ufficiale, ci accorgiamo che:

  • C rappresenta la variabile in base alla quale ordinare la directory e può assumere i valori N=nome, M=data modifica, S=dimensione, D=descrizione;
  • O rappresenta l'ordinamento con i valori A=ascendente e D=discendente;
  • V rappresenta il versioning nell'ordinamento 0=disabilitato, 1=abilitato;
  • F rappresenta alcune opzioni dell'IndexOptions 0=lista semplice, 1=lista FancyIndexed, 2=lista HTMLTable e FancyIndexed;
  • P permette di listare solo i file corrispondenti ad un certo pattern.

L'idea è semplice: passare tali parametri tramite un form per ottenere una sorta di pannello per l'ordinamento e filtraggio dei file. Concentriamoci solamente sulla ricerca di cui realmente sentiamo la mancanza, quindi sulla variabile P, pattern. Aggiungendo il seguente codice al file top.html:

<form action="" method="get">
	Cerca: <input type="text" name="P" value="*" />
	<input type="submit" name="X" value="Vai" />
</form>

i nostri utenti potranno inserire nel campo di input valori quali "*.jpg" per ottenere la visualizzazione dei soli file jpg o "ab*" per limitarsi a quelli che iniziano con la sequenza di caratteri ab.

Conclusioni

In queste pagine abbiamo visto come sia possibile sfruttare alcune caratteristiche di Apache, non molto conosciute, per organizzare un'area download, senza grandi pretese, ma neppure minimale. Tutte le direttive illustrate possono essere usate, a seconda delle esigenze, a livello di configurazione globale, di virtual host, di directory o di file di configurazione per-directory (.htacess). Gli esempi riportati sono stati testati su Apache 2.2 e sistema Linux Fedora Core 5 anche se, come al solito, non dovreste trovare differenze con altri sistemi operativi come Windows.

Ti consigliamo anche