drupal 7: перехватывать запросы URL-адресов файлов, расположенных в "Пути к общедоступной файловой системе"
Для Drupal 7 при переходе в: admin/config/media/файловая система вы можете настроить как Общедоступный, так и частный путь к файловой системе.
Возможно ли, чтобы файлы, находящиеся в "Пути к общедоступной файловой системе", при прямом доступе к ним по URL-адресу, перехватчик мог перехватить этот запрос на файл и принять решение, основываясь на роли пользователей, разрешить или отправить их в goto, как (drupal_goto('user', array('query' => array('destination' => $pre_alias)));)
Я знаю, что hook_file_download
может перехватывать запросы файлов для личных файлов, но если возможно, я не хочу тратить это дополнительное время на создание личной зоны.
1 answers
Не как стандарт, нет.
Файл .htaccess Drupal содержит следующие условия для основного index.php переписать:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Что в основном означает, что запросы на физические существующие файлы передаются без участия Drupal.
Чтобы изменить это поведение, вам потребуется переопределить эти условия либо в корневом файле.htaccess, либо в папке "файлы". Для nginx вы бы делали в основном то же самое, за исключением того, что конфигурационный файл vhost был бы место для логики перезаписи.
Затем вам нужно будет реализовать обратный вызов меню по пути files
, который обрабатывал все входящие запросы на файлы. Этот обратный вызов вызовет пользовательский хук, который ваш модуль(ы) будет использовать для принятия решений о том, следует ли загружать этот конкретный файл или нет. Если это так, вы бы вызвали передачу файла, если не 403.
Короче говоря, это не очень хорошая идея - вы значительно увеличите нагрузку на свой сервер со всеми этими дополнительными начальные загрузки (каждый файл CSS, каждое изображение, все остальное). То, что вы описываете , - это частная файловая система, было бы гораздо приятнее использовать ее.
Общедоступная файловая система предназначена для того, чтобы быть именно такой - общедоступной.