【发布时间】:2013-10-04 16:44:13
【问题描述】:
我正在做一个人们可以上传文件的网站。文件可以是公共访问的,也可以是私人访问的。为了避免编码问题,我将具有随机名称的文件存储在“隐藏”目录中。 但是,如果我们知道 url,则可以直接访问 public 文件夹。 (这不是问题)。
我的公共部分没问题,我的 php 脚本给用户一个如下所示的 url:
http://example.com/d/1/524dd711c3102/b1bi.png
而 apache 使用以下命令控制访问:
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 文件是否正常。
问题是,我认为这是不可能的。
所以:
- 有可能吗?如果有,怎么做?
- 您能想出更好的解决方案吗? (我想使用标准的 Apache/http 身份验证,但限制每个用户的访问会很棘手。
(我也可以使用 XSendFile,但我希望用户能够阅读/观看网站上的文件而无需下载(例如图片))
谢谢:)
【问题讨论】:
-
我不认为你可以让 Apache “询问” php 是否允许用户访问文件。
-
你如何验证你的用户?
-
您说要避免的 php 是您应该采取的方法。为什么要避免它?
-
@EtienneMiret:“基本”PHP 身份验证。查看数据库的登录表单
-
@Dagon:因为它又慢又重。
标签: php apache authentication