我正在使用Apache,并且在本地主机上有一个示例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网址栏。

注意:我发现以下解决方案可以在除Firefox以外的所有浏览器上进行测试。

#1 楼

请尝试以下操作:

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


如果直接访问图像,但允许它们在现场显示,则返回403。

注意:可能是当您打开带有图像的页面,然后将该图像的路径复制到地址栏中时,您可以看到该图像,这仅仅是由于浏览器的缓存,实际上该图像尚未从服务器加载(从Davo,以下是完整评论)。

#2 楼

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]


考虑到安全性,我认为这是一种礼貌的方式,禁止直接访问CMS敏感文件(例如xml,javascript ...):对于当今所有这些遍及网络的漫游器,我不知道他们的算法将从我的“ messageforcurious”中得到什么。

#3 楼

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

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


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

#4 楼

首先,找到主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)。而已!

#5 楼

在Web服务器上使用它时,只能重命名本地主机,例如:

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


#6 楼

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


#7 楼

对我来说,这是唯一有效的方法,而且效果很好:
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/