使用htaccess限制从其他域访问zip文件

时间:2014-03-24 09:17:15

标签: php apache .htaccess security

我正在运行一个网站,该网站在一个文件夹中包含多个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)上:/ - 但我认为这没什么区别。

感谢。

3 个答案:

答案 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);

在此示例中,您可以添加更多登录名,例如用户已登录。