对于Drupal 7,当转到: admin/config/media/ File -system时,您可以同时设置一个公共文件系统路径和一个私有文件系统路径。
在“公共文件系统路径”内的文件是否有可能在通过url直接访问这些文件时,钩子可以拦截该文件请求,并根据用户角色决定是否允许或将它们发送到像(drupal_goto('user', array('query' => array('destination' => $pre_alias)));)这样的goto
我知道hook_file_download可以拦截私有文件的文件请求,但如果可能的话,我不想花费额外的时间来设置私有区域。
发布于 2013-06-07 13:09:09
不是标准的,不。
Drupal的.htaccess文件中有以下条件用于主index.php重写:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d这基本上意味着对物理、现有文件的请求在没有Drupal参与的情况下被传递过。
要改变这种行为,您需要覆盖这些条件,无论是在根.htaccess中还是在文件文件夹本身下面的条件。对于nginx,您将做的基本上是相同的事情,除了vhost的配置文件将是重写逻辑的位置。
然后,您需要在path files上实现一个菜单回调,它处理所有传入的文件请求。该回调将调用自定义钩子,您的模块(S)将使用该钩子来决定是否应该下载该特定文件。如果是这样的话,您将调用一个文件传递,如果不是403。
长话短说,这不是一个好主意-你会给你的服务器增加大量额外的引导程序(每个CSS文件,每一个图像,每一个东西)。您所描述的是私有文件系统,使用它会更好。
公共文件系统就是这样设计的--公开的。
https://drupal.stackexchange.com/questions/75507
复制相似问题