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));