drupal 7: перехватывать запросы URL-адресов файлов, расположенных в "Пути к общедоступной файловой системе"


Для Drupal 7 при переходе в: admin/config/media/файловая система вы можете настроить как Общедоступный, так и частный путь к файловой системе.

Возможно ли, чтобы файлы, находящиеся в "Пути к общедоступной файловой системе", при прямом доступе к ним по URL-адресу, перехватчик мог перехватить этот запрос на файл и принять решение, основываясь на роли пользователей, разрешить или отправить их в goto, как (drupal_goto('user', array('query' => array('destination' => $pre_alias)));)

Я знаю, что hook_file_download может перехватывать запросы файлов для личных файлов, но если возможно, я не хочу тратить это дополнительное время на создание личной зоны.

 1
Author: 4life, 2013-06-07

1 answers

Не как стандарт, нет.

Файл .htaccess Drupal содержит следующие условия для основного index.php переписать:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Что в основном означает, что запросы на физические существующие файлы передаются без участия Drupal.

Чтобы изменить это поведение, вам потребуется переопределить эти условия либо в корневом файле.htaccess, либо в папке "файлы". Для nginx вы бы делали в основном то же самое, за исключением того, что конфигурационный файл vhost был бы место для логики перезаписи.

Затем вам нужно будет реализовать обратный вызов меню по пути files, который обрабатывал все входящие запросы на файлы. Этот обратный вызов вызовет пользовательский хук, который ваш модуль(ы) будет использовать для принятия решений о том, следует ли загружать этот конкретный файл или нет. Если это так, вы бы вызвали передачу файла, если не 403.

Короче говоря, это не очень хорошая идея - вы значительно увеличите нагрузку на свой сервер со всеми этими дополнительными начальные загрузки (каждый файл CSS, каждое изображение, все остальное). То, что вы описываете , - это частная файловая система, было бы гораздо приятнее использовать ее.

Общедоступная файловая система предназначена для того, чтобы быть именно такой - общедоступной.

 3
Author: Clive, 2013-06-07 13:09:09