Apache 使用.htaccess限制对文件下载的访问

Apache 使用.htaccess限制对文件下载的访问,apache,.htaccess,Apache,.htaccess,我下载了诸如product.exe之类的静态文件。我想限制访问 使用.htaccess文件下载这些文件,以便只有某些用户可以下载 我认为这可以通过mod_rewrite来处理,我在网上找到了这个片段 这会阻止使用推荐人的坏网站 RewriteEngine on # Options +FollowSymlinks RewriteCond %{HTTP_REFERER} http://example.com/downloads/confirm/3811 [NC,OR] RewriteRule .*

我下载了诸如product.exe之类的静态文件。我想限制访问 使用.htaccess文件下载这些文件,以便只有某些用户可以下载

我认为这可以通过mod_rewrite来处理,我在网上找到了这个片段 这会阻止使用推荐人的坏网站

RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} http://example.com/downloads/confirm/3811 [NC,OR]
RewriteRule .* - [F]
资料来源:


我不想基于推荐人进行阻止,而是希望允许基于推荐人进行阻止。通过这种方式,推荐人可以是一个在未登录之前无法访问的URL。我正在考虑走这条路线,并使用http引用程序来授予该文件的权限。我知道这可能不是最好的方法,我猜推荐人可能会被欺骗,但不一定要那么安全。我也愿意接受其他限制访问的想法

如果您希望基于推荐人允许:

RewriteCond %{HTTP_REFERER} !^http://goodsite-1.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://goodsite-2.com/from/there.php [NC]
RewriteCond %{HTTP_REFERER} !^$ # There are some users/browsers not sending referrer..
RewriteRule .* - [F]

或者,您可以基于cookie允许,您可以在之前使用PHP设置cookie:

RewriteCond %{HTTP_COOKIE} !^.*cookie-name.*$ [NC]
RewriteRule .* - [F]

或仅允许Post请求:

RewriteCond %{REQUEST_METHOD} !=POST
RewriteRule .* - [F]
以及HTML中“post request”链接到要下载的文件:

<form method="post" action="path/to/download.mp3">
  <input type="submit" value="Click here to download!" />
</form>



实际上,您可以将这些方法结合起来。

由于一些安全问题,http\u referer不是一个可靠的标头

  • 某些浏览器配置会导致http\U Referer标头为空
  • 有一些工具可以操作http请求头。你可以看看Firefox开发者工具。(Ctrl+Shift+I>Network)

使用PHP或Perl之类的脚本语言来处理用户验证并将文件传送到浏览器怎么样?@cdhowie-这就是我们目前正在做的事情,但是下载失败了很多,因为我们使用PHP来处理readfile。我们想直接下载。谢谢,这就是我想要的。事实上,我试过使用http参考,但IE没有提供http参考。我读了IE文档,它说它不会在非SSL页面上提供推荐人,但是那些文档可能已经过时了,因为它仍然不起作用。因此,我按照您的建议在PHP中设置了一个cookie,现在可以正常工作了。