我在/ var / www / htdocs中获得了以下目录:
test123/ test123/cache/ test456/ test456/cache/ test789/ test789/cache/ another_directory/cache/
我想实现这一点:
所以我得到了下面的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,所以试着切换两个语句。