Premessa: questa tips è stata testata con Drupal 5 ma credo che si possa applicare senza difficoltà anche su Drupal 6 (e in linea di principio su qualunque CMS).
Problema: ho una dir in cui ci sono una serie di files il cui accesso è regolamentato da diversi vincoli. Non voglio che i miei files siano visibili direttamente mettendo la url nel browser.
Soluzione:
- nella dir che voglio proteggere (per esempio files) metto nel file .htaccess le seguenti direttive:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /system/files
RewriteRule ^(.*)$ $1 [L,R=301]
</IfModule>
- in questo modo intercetto qualunque richiesta fatta direttamente via browser a www.esempio.it/files
- in Home › Amministra › Configurazione del sito: scelgo il flag public (in questo modo non demandiamo più a drupal il controllo ma ci assumiamo noi al responsabilità del download dei files)
- ora non basta che realizzare un piccolo modulo che sfrutta lo hook_file_download, per esempio:
function miomodulo_file_download($file) {
global $user;
if ($user->uid == 1 || in_array('esempio', $user->roles)) {
return array('Pragma:no-cache', 'Cache-control:private', 'Content-type:' . 'application/octet-stream');
} else {
return -1;
}
}
- ovviamente, in questo punto, si possono complicare a piacere le regole di accesso.


