我正在运行一个网站,该网站在一个文件夹中包含多个zip文件。
我希望人们能够从网站上的下载链接访问这些内容(这将在登录后面),但我想通过输入zip的URL来确保无法下载它们文件直接。
所以我认为这需要用htaccess完成 - 并且某种拒绝所有规则,除了我的域名。这是正确的吗?
现在,我的文件包含此内容(我的实际域名被“域名”替换):
SetEnvIfNoCase Referer "^http://domain.com/" locally_linked=1
SetEnvIfNoCase Referer "^http://domain.com$" locally_linked=1
SetEnvIfNoCase Referer "^http://domain.com/" locally_linked=1
SetEnvIfNoCase Referer "^http://domain.com$" locally_linked=1
SetEnvIfNoCase Referer "^$" locally_linked=1
<FilesMatch "\.(zip)$">
Order Allow,Deny
Allow from env=locally_linked
</FilesMatch>
有人可以解释为什么这可能不起作用吗?
我在共享主机(Dreamhost)上:/ - 但我认为这没什么区别。
感谢。
答案 0 :(得分:0)
您要做的是阻止hotlinking。您不能真正阻止它发生,但您可以拒绝其他引荐来源的下载。
将以下内容添加到您的.htaccess
文件中,将example.com
替换为您的域名。
如果您想保护其他文件格式,请将其添加到zip所示的位置,例如(zip|rar)
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)example.com/.*$ [NC]
RewriteRule \.(zip)$ - [F]
如果您想提供替代内容(如页面说您必须先登录),请使用:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)example.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ http(s)?://www.example.com/alternate.html [R,L]
答案 1 :(得分:0)
我有类似的东西,但使用mod_rewrite
并使用此代码
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(zip)$ - [NC,F,L]
答案 2 :(得分:0)
您可以使用标头执行此操作:
// set example variables
$filename = "file_to_download.zip";
$filepath = "/var/www/domain/path_to_download/";
// http headers for zip downloads
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$filename."\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filepath.$filename));
ob_end_flush();
@readfile($filepath.$filename);
在此示例中,您可以添加更多登录名,例如用户已登录。