Ti conviene usare php, come suggerito da fdisotto...con apache la vedo troppo ingarbugliata, senza contare che devi avere un certo controllo del webserver, che se ti appoggi a hosting non hai.
Per il problema che hai esposto, puoi risolverlo con la readfile di php o x-sendfile di apache (se il modulo è disponibile):
1. Metti i file in una directory non pubblica (o protetta)
2. Crei un script per il download del file
es
getFile.php?file=<id>
Codice PHP:
// Controlli se l'utente è loggato e se può scaricarlo, facendo una query sul DB
if(<Se l'utente non è loggato> || <la query da 0 righe>){
// L'utente non ha il permesso di scaricare il file
}else{
$file = // riprendi il path completo del file dalla query di sopra;
header('Content-Description: File Transfer');
// Sarebbe più opportuno mettere il MIME giusto
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$file);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
}