Per non rendere troppo noiosa la lettura degli articoli relativi ad Apache ho deciso di inserire ogni tanto degli esempi pratici di utilizzo per rendere più comprensibili alcuni aspetti relativi alla configurazione del servizio.
Partiamo da un problema noto, e poi in base alle conoscenze acquisite cerchiamo una soluzione efficace.
Problema: Ho un sito web http://vendolibri.com tramite il quale voglio condividere alcuni documenti solo a utenti autenticati e quindi riconosciuti.
Il mio sito è in grado di riconoscere ed autenticare internauti, il fatto sta che tutti i miei documenti stanno all’interno della cartella http://vendolibri.com/private/ .
La scelta è obbligata, non posso inserire direttamente i testi nel database perché sarebbe troppo oneroso in termini di risorse sprecate, devo per forza depositarli su uno spazio web sottostante al dominio vendolibri.com.
Soluzione: La soluzione adottata in questo caso è quella di rendere la cartella private non visibile, ma permettendo il download del file tramite script php solo a quegli utenti riconosciuti.
Tutto questo è possibile con poche righe nel file di configurazione, VirtualHost o configurazione generale che sia.
Dettagli file di configurazione:
<Directory /var/www/vendolibri/private>
Order Allow,Deny
Deny from all
</Directory>
In questo caso se volessi scaricare il testo ciao.txt, tramite la pagina web http://vendolibri.com/private/ciao.txt
Otterrei un access denied, ma se eseguissi la pagina
http://vendolibri.com/admin/download.php
(accessibili solo tramite autenticazione php) otterrei il file ciao.txt.
Ecco il codice sorgente della pagina download.php
<?php
$file = ‘/private/ciao.txt’;
if (file_exists($file)) {
header(‘Content-Description: File Transfer’);
header(‘Content-Type: application/text’);
header(‘Content-Disposition: attachment; filename=’.basename($file));
header(‘Content-Transfer-Encoding: binary’);
header(‘Expires: 0′);
header(‘Cache-Control: must-revalidate, post-check=0, pre-check=0′);
header(‘Pragma: public’);
header(‘Content-Length: ‘ . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>









