【发布时间】:2015-10-18 00:39:56
【问题描述】:
我之前也问过类似的问题 Restrict access to directories through ip address
当时 apache 2.2 的问题已经解决。最近我重新安装了操作系统(到 Debian 8),它带有 apache 2.4。
我想限制对文件的访问 - 当请求来自“通过”IP 时。主要是如果在浏览器中我尝试打开 http://192.168.252.178/test/image.jpg 它应该显示错误 - 403 被禁止。目录test 位于apache 的www 目录中。但是,如果我输入 http://www.example.com/image.jpg,我应该能够访问该图像 - 考虑到 example.com 指向该 test 目录。
使用 apache 2.2 版,我只需将这些行放在我的默认站点配置文件中 - 问题就解决了
<Files ~ ".+">
Order allow,deny
Deny from all
</Files>
现在,尝试同样的事情是行不通的:即使我尝试使用域名打开任何网站,我也会收到 403 禁止。
考虑到 2.4 中的更改,我也尝试了这个,但在尝试打开某些站点时再次获得相同的 403 禁止。
<Files ~ ".+">
Require all denied
</Files>
我的目标是防止对目录和文件的任何形式的访问——如果它们是通过 IP 地址访问的。我在默认站点的配置中也有这行,以防止目录访问,这工作正常。
<Directory /home/username/www>
Options -Indexes
AllowOverride All
Require all granted
</Directory>
所以,问题是 - 如何防止通过 IP 地址访问文件。我还需要通过 apache config 来实现这一点,htaccess 对我来说不是一个解决方案。我需要递归地为www 中的所有目录/文件实现这一点,因此指定确切的文件名和/或目录也不是解决方案。
谢谢
【问题讨论】:
-
您使用的是 Apache 的 name based VirtualHosts 吗?在我看来,它们非常适合解决您的问题:每个站点一个 VHost(
site1,site2,...)和一个捕获所有其他请求的“catchall”,因此对 IP 的请求地址也。您可以为每个站点定义不同的 DocRoot,并非常轻松地关闭对 IP 地址的所有请求。 -
@Zimmi,感谢您的评论,是的,实际上我每个 ip 有多个域,但是您能否发布一个示例来说明您的意思?谢谢