68

我正在使用 Apache,并且在我的Local Host上有一个示例 web 文件夹,例如:

      http://localhost/test/

文件test夹中的文件:

     index.html  
     sample.jpg  
     .htaccess  

样本来源index.html

<html>
  <body>
    <img src="sample.jpg" />
  </body>
</html>

当我在 运行网站时http://localhost/test/,它只会在页面上显示图像“sample.jpg”。


问题:

  • 我想防止图像http://localhost/test/sample.jpg直接显示在 url 栏中。

注意: 我发现以下解决方案在除 Firefox 之外的所有浏览器上测试时都有效。

4

7 回答 7

112

尝试以下操作:

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

如果您直接访问图像,则返回 403,但允许它们在站点上显示。

注意:有可能当你打开某个带有图片的页面,然后将该图片的路径复制到地址栏中时,你可以看到该图片,这只是因为浏览器的缓存,实际上该图片尚未从服务器加载(来自达沃,下面的完整评论)

于 2012-04-19T21:07:50.947 回答
23

rosipov 的规则很好用!

我在实时站点上使用它来显示空白或特殊消息;)代替对文件的直接访问尝试,我宁愿保护一点不被直接查看。我认为它比 403 Forbidden 更有趣。

因此,采用 rosipov 的规则将任何对 {gif,jpg,js,txt} 文件的直接请求重定向到 'messageforcurious' :

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd.*$ [NC] 
RewriteRule \.(gif|jpg|js|txt)$ /messageforcurious [L]

我认为这是一种礼貌的方式来禁止直接访问诸如 xml、javascript 之类的 CMS敏感文件......同时考虑到安全性:对于现在在网上潦草的所有这些机器人,我想知道他们的算法会从我的'消息好奇”。

于 2013-03-27T20:33:16.133 回答
10

根据您的评论,这就是您所需要的:

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

我已经在我的本地主机上对其进行了测试,它似乎工作正常。

于 2012-04-19T21:05:55.597 回答
8

首先,找到主apache的配置文件httpd.conf所在的位置。如果你使用 Debian,它应该在这里:/etc/apache/httpd.conf. 使用 Vim 或 Nano 等文件编辑器打开此文件并找到如下所示的行:

Options Includes Indexes FollowSymLinks MultiViews

然后删除单词索引并保存文件。该行应如下所示:

Options Includes FollowSymLinks MultiViews

完成后,重新启动 apache(例如 Debian 中的 /etc/init.d/apache restart)。就是这样!

于 2012-06-14T06:47:20.267 回答
1

对我来说,这是唯一有效的方法,而且效果很好:

RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@] )@@https?://\1/.
RewriteRule .(gif|jpg|jpeg|png|tif|pdf|wav|wmv|wma|avi|mov|mp4|m4v|mp3|zip?)$ - [F]

在以下位置找到它: https ://simplefilelist.com/how-can-i-prevent-direct-url-access-to-my-files-from-outside-my-website/

于 2020-10-06T05:33:57.027 回答
0

当我在我的网络服务器上使用它时,我只能重命名本地主机,如下所示:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]
于 2019-06-10T14:45:08.383 回答
0
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteCond %{REQUEST_URI} !^http://(www\.)?localhost/(.*)\.(gif|jpg|png|jpeg|mp4)$ [NC] 
RewriteRule . - [F]
于 2020-02-15T14:27:37.227 回答