(htaccess)如何使文件只能由主机服务器访问并阻止直接访问?

时间:2012-04-19 19:41:40

标签: php apache .htaccess mod-rewrite hotlinking

我正在使用Apache,并假设“images / sample.jpg”中有一个文件。

  • 使用 .htaccess ,如何在网站上显示然后阻止直接访问网址(< em>例如,直接网址如“http://www.abc.com/images/sample.jpg”)?

  • 如果可能,我还希望该解决方案能够影响“.htaccess”文件下的所有子文件夹。


附加说明:
在获得低于答案的一天后,我发现所有解决方案在逻辑上都有效,但是Firefox有问题。我的意思是,下面的答案是在每个浏览器上进行测试时给出的解决方案,而不是Firefox。

5 个答案:

答案 0 :(得分:3)

这被称为“hotlinking” - 我建议先阅读它,因为它不仅仅是你的.htaccess中的一行或一行代码。这个页面很不错:http://altlab.com/htaccess_tutorial.html

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ http://i.imgur.com/qX4w7.gif [L]

这将显示来自imgur的图像,但我有时想更进一步,并从我自己的主机托管替代图像 - 例如,如果它是竞争对手,你可以有很多乐趣;)

答案 1 :(得分:1)

使用此代码块来防止热链接:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]

这可以帮到你:http://www.selfseo.com/story-18469.php

答案 2 :(得分:1)

不完全确定,但这应该指导你:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteRule (images/sample.jpg)$ - [R=404,L]

答案 3 :(得分:1)

除了.htaccess规则之外,还有很多可以防止图像的热链接。但是,您希望在htaccess中阻止图像热链接的基础是:

RewriteCond %{HTTP_REFERER} !^http://(www\.)?example.com/.*$      [NC]
RewriteRule .*\.(jpg|jpeg|png|bmp)$ - [F,NC]

Apache ReWrite guide

答案 4 :(得分:1)

根据您的评论看起来这就是您所需要的:

RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/ [NC] 
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC]

我已经在我的localhost上测试了它,似乎工作正常。