Apache 2.4限制访问

我在/ var / www / htdocs中获得了以下目录:

test123/ test123/cache/ test456/ test456/cache/ test789/ test789/cache/ another_directory/cache/ 

我想实现这一点:

  • 访问/为每个人
  • 访问/test123/test.htm + /test456/test.htm + /test789/test.htm为ip-address 192.168.1.10
  • 无法访问所有caching导航器

所以我得到了下面的apache 2.4configuration,但它不能按预期工作,因为我仍然能够访问caching目录test123 / cache,test456 / cache和test789 / cache。

 <VirtualHost *:80> DocumentRoot /var/www/htdocs <Directory "/var/www/htdocs"> Options -Indexes +FollowSymLinks AllowOverride None </Directory> <Directory ~ "/var/www/htdocs/test(123|456|789)"> Require ip 192.168.1.10 </Directory> <Directory "/var/www/htdocs/*/cache"> Require all denied </Directory> </VirtualHost> 

我究竟做错了什么? 谢谢你的帮助! 🙂

来自文档的引用:

  • 按最短目录组件的最长顺序处理<Directory> […]。 例如, <Directory "/var/web/dir">将在<Directory "/var/web/dir/subdir">
  • 如果多个<Directory>部分应用于相同的目录,则按照configuration文件顺序处理它们。

这使你的情况有点困难。

从第二条语句我会解释,它应该只需要切换两个<Directory>指令的顺序:

 <Directory "/var/www/htdocs/*/cache"> Require all denied </Directory> <Directory ~ "/var/www/htdocs/test(123|456|789)"> Require ip 192.168.1.10 </Directory> 

如果第一个匹配,它会被拒绝。 否则第二个指令应该匹配。

然而,第一条语句指出最短的目录是先处理的。 这里最短的是<Directory ~ "/var/www/htdocs/test(123|456|789)"> 。 在这种情况下,顺序无关紧要,你将不得不寻找另一个解决scheme。

我现在不能testing,所以试着切换两个语句。