[英]Make Apache use PHP to control access to files / directories
我正在建立一个网站,人们可以在上面上传文件。 文件可以是公共访问权限,也可以是私有访问权限。 为避免编码问题,我将带有随机名称的文件存储在“隐藏”目录中。 但是,如果我们知道URL,则可以直接访问公用文件夹。 (这不是问题)。
我的公共部分没问题,我的php脚本为用户提供了一个类似于以下内容的网址:
http://example.com/d/1/524dd711c3102/b1bi.png
并使用以下命令控制访问:
RewriteRule ^d/(\d+)/([a-zA-Z0-9]+)/(.+)$ ./files/public/$1/$2 [L]
到目前为止,一切都很好。
但是现在,棘手的部分是私有文件。 我需要只有上载文件的用户才能访问该文件。 而且我想避免使用带有一些readfile或file_get_contents
或类似内容的基于PHP的解决方案。
实际上,我会想像一下:
用户尝试访问./files/private/< folder_id>/< file_id>
,如果没有问题,Apache会“询问” PHP文件。
问题是,我认为这是不可能的。
因此:
(我也可以使用XSendFile,但我希望用户无需下载即可阅读/观看网站上的文件(例如图片))
谢谢 :)
mod_rewrite中有RewriteMap
,它可以使用外部数据源提供一些重写规则/映射。 但是,性能可能会非常糟糕。
检查: http : //httpd.apache.org/docs/current/rewrite/rewritemap.html#prg
您可以使用fread()
并将1kb的块与垃圾回收器( http://php.net/gc )一起读取/发送到浏览器,这在内存中根本不是问题。
使用fread()
只能在文件中保存位置和文件的一部分。
这将仅比Apache小一点,但是您具有完全的访问控制,这在所有情况下都是值得的。
其他网站将BLOBS中的大数据保存到数据库中,您甚至不会注意到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.