La cosa più semplice è quella di far gestire tutto da php. Fermo restando il .htpasswd (oppure negare l'accesso a tutti da htaccess) per impedire l'accesso diretto, dovresti fare due pagine:
1. La lista dei file della cartella
2. Il download del file
In tutti e due i gli script, prima verifichi se l'utente è autorizzato, poi procedi con la lista dei file o il download.
Per fare il download puoi usare la readfile()
es:
Codice PHP:
<?php
if(non_sono_autorizzato){
header('Location: login.php');
exit();
}
$file = @$_GET['name'];
// Eventuali controlli sul file richiesto
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Pragma: public');
header('Content-Length: ' . filesize(path_assoluto_del_file));
readfile(path_assoluto_del_file);
exit();
?>