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

我有像product.exe一样的静态文件的下载。 我想用.htaccess文件限制对这些文件的访问,以便只有特定的用户才能下载它。

我认为这可以用mod_rewrite处理,我发现这个片段在线阻止不良站点使用引用。

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

来源: http : //www.javascriptkit.com/howto/htaccess14.shtml

而不是基于引用来阻止,我想允许基于引用。 这样,引用者可以是一个URL,不能访问没有第一login。我正在考虑走这条路线,并使用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设置:

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

或者也只允许发布请求:

 RewriteCond %{REQUEST_METHOD} !=POST RewriteRule .* - [F] 

以及您的HTML中的“发布请求”链接到要下载的文件:

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

其实你可以结合这些方法。

由于一些安全问题http_referrer不是一个可靠的头。

  • 一些浏览器配置导致一个空的http_referrer头
  • 有一些工具可以处理http请求标头。 你可以看看Firefox开发者工具(Ctrl + Shift + I> Network)