我在通过ip地址限制对目录的访问之前也问过一个类似的问题
当时,Apache2.2的问题已经解决了。最近,我重新安装了操作系统(到Debian 8),它附带了Apache2.4。
我想限制对文件的访问--当请求“由”IP来时。主要是如果在浏览器中我尝试打开http://192.168.252.178/test/image.jpg,它应该显示错误- 403被禁止。test目录位于apache的www目录中。但是,如果输入http://www.example.com/image.jpg,我应该能够访问该图像--考虑到example.com指向test目录。
使用ApacheVersion2.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,通过htaccess来实现这一点,这对我来说不是一个解决方案。我需要递归地对www中的所有目录/文件实现这一点,因此指定确切的文件名和/或目录也不是一个解决方案。
谢谢
发布于 2015-07-28 15:28:41
当您使用基于名称的虚拟主机时,主服务器就会消失。Apache将根据IP地址(可能有多个)和端口首先选择要使用的虚拟主机,只有在第一个选择之后,它才会按照虚拟主机在配置中出现的顺序,在此候选子集中搜索相应的ServerName或ServerAlias。
如果没有找到虚拟主机,那么将选择这个子集中的第一个VHost (也是按配置顺序)。更多。
我之所以提到这一点,是因为只有一种类型的VirtualHost指令是很重要的:
<VirutalHost *:80>或
<VirtualHost 123.45.67.89:80>我将在示例中使用通配符。您需要一个目录,如/var/www/catchall,其中包含一个文件index.html或类似的文件,这是您想要的。
<VirtualHost *:80>
# This first-listed virtual host is also the default for *:80
# It will be used as the catchall.
ServerName 123.45.67.89
# Giving this DocRoot will avoid any request based on IP or any other
# wrong request to get to the other users directories.
DocumentRoot "/var/www/catchall"
<Directory /var/www/catchall>
...
</Directory>
</VirtualHost>
# Now you can add as usuall the configuration for any other VHost you need.
<VirtualHost *:80>
ServerName site1.com
ServerAlias www.site2.com
DocumentRoot "/home/username1/www"
<Directory /home/username1/www>
...
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName site2.com
ServerAlias www.site2.com
DocumentRoot "/home/username2/www"
<Directory /home/username2/www>
...
</Directory>
</VirtualHost>Debian特指:
对于Debian,理想情况下,每个文件都配置一个VHost,并将该文件放在/etc/apache2/sites-available目录中。将文件命名为您喜欢的,只有包含所有vhost的文件应该被命名为类似于000-catchall,因为它们将按字母顺序从/etc/apache2/sites-enabled目录中读取。
然后禁用Debian通常的默认站点:
a2dissite 000-default如果需要,您可以启用新的所有站点和其他VHosts:
a2ensite 000-catchall如果不更改其文件名,则ls /etc/apache2/sites-enabled命令应该将集线器显示为列表的第一个,使其始终是第一个文件。重启Apache:service apache2 restart
当然,您可以在原始的默认VHost配置文件中进行所有这些更改,但我通常更喜欢保留原始模型。
https://stackoverflow.com/questions/31659684
复制相似问题