(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)。 而已!