Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用htaccess限制从其他域访问zip文件_Php_Apache_.htaccess_Security - Fatal编程技术网

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

Php 使用htaccess限制从其他域访问zip文件,php,apache,.htaccess,security,Php,Apache,.htaccess,Security,我正在运行一个网站,在一个文件夹中有许多zip文件 我希望人们能够通过网站上的下载链接访问这些内容(这将在登录后进行),但我希望通过直接键入zip文件的URL来确保这些内容不会被下载 所以我认为这需要通过htaccess来完成——以及某种形式的拒绝所有规则,我的域除外。这是正确的吗 现在,我的文件包含以下内容(我的实际域替换为“域”): setEnvifLocase引用器”^http://domain.com/“本地链接=1 SetEnvifLocase Referer“^http://doma

我正在运行一个网站,在一个文件夹中有许多zip文件

我希望人们能够通过网站上的下载链接访问这些内容(这将在登录后进行),但我希望通过直接键入zip文件的URL来确保这些内容不会被下载

所以我认为这需要通过htaccess来完成——以及某种形式的拒绝所有规则,我的域除外。这是正确的吗

现在,我的文件包含以下内容(我的实际域替换为“域”):

setEnvifLocase引用器”^http://domain.com/“本地链接=1
SetEnvifLocase Referer“^http://domain.com$“本地链接=1
SetEnvifLocase Referer“^http://domain.com/“本地链接=1
SetEnvifLocase Referer“^http://domain.com$“本地链接=1
SetEnvIfNoCase参考“^$”本地链接=1
命令允许,拒绝
允许来自环境=本地链接
有人能解释为什么这可能不起作用吗

我在一个共享主机上(Dreamhost):/-但我认为这没什么区别


谢谢。

你想做的是防止。你不能真的阻止它发生,但你可以拒绝从其他推荐人下载

将以下内容添加到
.htaccess
文件中,用域替换
example.com
。 如果您想保护其他文件格式,请将它们添加到显示zip的位置,例如
(zip | rar)

如果您想提供其他内容(如页面上说您必须先登录),请使用:


我有一些类似的东西,但使用
mod_rewrite
并使用此代码

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(zip)$ - [NC,F,L]

可以使用标题执行此操作:

// 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);

在本例中,您可以添加更多登录,例如用户登录。

这似乎可以阻止人们链接到文件-这很好,谢谢。但这并没有阻止我在浏览器中直接输入URL——有什么办法可以解决这个问题吗?(例如,有人猜测文件名)此代码验证referer,因此,如果referer不是来自您的域,则即使您键入direct URL,也不会下载该文件!非常感谢。当我尝试这样做时,它似乎对我不起作用,但很高兴听到:)这会进入htaccess文件吗?不,它不是htaccess。这是PHP的代码。我知道您需要htaccess中的解决方案,但也许这个解决方案更好。啊,好的-有用,但不完全是我在这个例子中想要的。这段代码的问题是,如果你把它放在.htaccess上,你需要在所有使用下载的地方插入它。你不需要在php代码中插入任何代码,你可以使用include或require函数。非常有用,谢谢。是否有办法修改/编辑此文件,以防止人们猜测zip文件的URL,并直接将其输入浏览器栏以启动下载?这也将阻止直接访问。这将允许访问zip文件的唯一方法是,如果它们的referer头包含您的域。通常情况下,这只会发生在您的网站中的链接之后。由于我公司的防火墙,我无法访问该文件,请使用我回答中的代码重试。根据这个问题,它应该起作用:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)example.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ http(s)?://www.example.com/alternate.html [R,L]
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(zip)$ - [NC,F,L]
// 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);