期望的:
domain.tld/download/file_01.zip
private/download.php
file_01.zip
开始下载 注意:必须保护file_01.zip
不受直接访问。
简化文件夹结构:
root/
public/
.htaccess
index.php
private/ <<< this area is blocked from direct access >>>
files/
file_01.zip
file_02.zip
.htaccess
download.php
公开/ htaccess的
RewriteRule ^download/(.*)?$ ./../private/download.php?file=$1 [NC,L]
私人/ .htaccess (编辑)
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
的download.php
$file = 'files/'.$_GET['file'];
// check: user allowed to download?
// check: more stuff (security, etc.) ...
forceDownload($file);
RewriteRule有效,但我收到错误Forbidden: You don't have permission to access [...] on this server
,可能是因为用户调用了请求,而不是服务器。
有什么想法吗? 提前谢谢!
答案 0 :(得分:1)
作为RiggsFolly stated in their comment。
您需要将private/
.htaccess文件修改为:
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
Allow from 127.0.0.1 #or your server address/etc
</IfModule>
这是另一个解决方案,假设你的Apache版本是 >=2.4
。 (通过使用Require)
<IfModule !mod_authz_core.c>
Require all granted
Require ip 127.0.0.1
</IfModule>
答案 1 :(得分:1)
还有一种方法。重命名特定目录(例如,在它之前添加一个点的当前名称,AVFileTypeMPEG4
)并将其放在.htaccess文件中。
.private
添加此规则后,将禁止/保护以RewriteRule (^\.|/\.) - [F]
开头的每个文件和目录,就像.htaccess一样。 :)
这将阻止除PHP以外的任何人访问以打开,查看,修改文件/目录内容。
以下是(非常常见的)基本.htaccess *(位于DOCUMENT_ROOT目录中)mod_rewrite规则的示例。
.
完成此操作后,您无法直接链接到.zip或任何文件分机。你有这个想法,但是用其他方式用最喜欢的PHP&#39;技巧来做到这一点。你的。 :)
如果你认为这会给你很多代码重构,只是因为一个目录,你可以将这些点添加到zip文件,并将它们移动到别处,直接访问虚线文件,仍然无法实现。