(htaccess)如何防止直接URL访问文件?

这是我同样的问题的第二个职位。 因为以前的post需要更多的例子。

好吧,让我们再说一遍,我使用Apache,我有一个示例web文件夹(在我的本地主机),如:

  • HTTP://本地主机/testing/

在文件夹中,文件将是:

  • 的index.html
  • sample.jpg
  • 的.htaccess

“index.html”将包括:

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

当我在http://localhost/test/运行网站时,会在页面上显示图片`sample.jpg'。

那么问题在于

  • 我想直接在url栏中将图片显示为http://localhost/test/sample.jpg

注意:
得到低于答案的一天后,我发现所有的解决scheme在逻辑上工作,但与Firefox的问题。 我的意思是,下面的答案是给每个浏览器,而不是Firefox的testing解决scheme。

尝试以下操作:

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

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

注意:当你用图像打开某个页面,然后将该图像的path复制到地址栏中时,可能会看到该图像,这只是因为浏览器的caching,实际上该图像尚未从服务器加载(来自Davo,以下全文)

罗西波夫的规则很好用!

我在现场使用它来显示一个空白或特殊的信息;)代替文件的直接访问尝试,我宁愿保护一点点直接看法。 我认为这比403 Forbidden更有趣。

因此,采取罗西波夫的规则,redirect任何直接请求{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 合理的文件 …安全的头脑:现在所有这些机器人乱写networking,我不知道他们algorithm会从我的' messageforcurious'。

基于你的意见看起来像这是你所需要的:

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

我testing了我的本地主机,它似乎工作正常。

首先,find主要的Apacheconfiguration文件httpd.conf位于哪里。 如果你使用Debian,应该在这里: /etc/apache/httpd.conf 。 使用像Vim或Nano这样的文件编辑器打开这个文件并find如下所示的行:

 Options Includes Indexes FollowSymLinks MultiViews 

然后删除单词索引并保存该文件。 该行应该看起来像这样:

 Options Includes FollowSymLinks MultiViews 

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