Drupal有两种允许用户下载文件的方式,它们是私有的和公共的。
在公开的情况下,任何人都可以打开文件,而Drupal则不参与下载过程。这意味着下载文件时不会记录任何统计信息或使用权限。每个文件均按名称引用。
私有文件访问意味着每次下载文件时都运行Drupal。这样可以记录下载内容并运行权限检查,以确保允许有问题的用户访问文件。每个文件所引用的路径都可以与原始文件名完全不同。
使用私有文件访问的主要问题是,如果您允许用户将图像上载到模板中,则可能会引起问题(例如标头图像和事物)。如果您将其打开并允许使用许多不同的文件,也可能导致严重的性能下降,因为每个文件都必须通过Drupal传递,以确定当前用户是否允许下载该文件。
私有文件的缺点是,这也意味着您不能仅对站点上的文档进行访问限制,因为对所有文件都设置了权限。
通过使用以下.htaccess规则,可以下载具有公共文件访问权限的私有文件。可以将其放置在IfModule mod_rewrite.c块中。
RewriteRule ^sites/drupal/files/([^/]*?)$index.php?q=system/files/$1 [QSA]
如果要将文件夹用于特定的URL,则可以执行以下操作:
RewriteRule ^sites/www\.example\.com/files/([^/]*?)$index.php?q=system/files/$1 [QSA]
该规则将告诉Apache,如果该文件位于files目录的根目录中,而不位于任何子目录中,则必须将文件名传递给Drupal。只要文件名中没有斜杠,正则表达式就返回一个字符串。这样,我们可以将根目录用于可下载文件,并允许在这些文件上使用权限和统计信息。sites / default / files目录的所有子目录都可以用于用户图像和主题项目,而不必引导Drupal。