对于文件传输系统,我将数据存储在我的服务器上。可以使用URL访问数据,例如:
http://filestorage.example.com/files/clientfiles/clientid/test.pdf
文件夹clientid /中的所有文件都链接在客户端的生成下载页面上,例如:
http://example.com/download.php?clientid=28692692846
以上网址包含一个网页,其中包含指向clientid文件夹内所有文件的多个链接:
<a href="http://filestorage.example.com/files/clientfiles/clientid/test.pdf" download>
test.pdf
</a>
...
现在我想限制对文件的访问。从外部访问文件应该是不可能的,只能从download.php访问它们。 是否有可能实现这样的目标?
文件和脚本在同一台服务器上。
答案 0 :(得分:0)
您可以将.htaccess
文件放在包含以下内容的文件夹中:
deny from all
通过这种方式,您无法打开该文件夹中的任何文件,但您可以将它们包含在php中而不会出现任何问题。
答案 1 :(得分:0)
我能想到的最简单的方法是使用在/ clientid文件夹中的文件上生成的唯一会话变量 - 无论文件扩展名是什么,它们都是简单的PHP页面通过download.php加载文件。
session_start();
$_SESSION['file_id'] = $secret_file_id;
header("Location: http://example.com/download.php?clientid=28692692846");
然后在download.php文件中,检查此变量。
session_start();
if((isset($_SESSION['file_id'])) && ($_SESSION['file_id'] == $secret_file_id)) {
// Offer file for download
} else {
//Not referred from correct URL, reject.
}
答案 2 :(得分:0)
是的,您可以通过.htaccess
使用以下方式实现此目的:
order deny,allow
deny from all
allow from example.com/download.php
除非他们通过example.com/download.php
访问,否则将拒绝所有人访问。
如果你正在使用Apache 2.4,那么你需要使用:
Require all denied
Require host example.com/download.php
显然,您需要将.htaccess
文件放入您希望限制访问的文件夹中。因此,如果我正确理解您的文件结构/clientid/