Apache 2.4 限制访问

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 地址 192.168.1.10
  • 无法访问所有缓存目录

因此我得到了以下 apache 2.4 配置,但它没有按预期工作,因为我仍然能够访问缓存目录 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>

我做错了什么?谢谢你的帮助!:)

答案1

引号来自文档

  • <Directory>[...] 按照从最短目录组件到最长目录组件的顺序进行处理。例如,<Directory "/var/web/dir">将在 之前进行处理<Directory "/var/web/dir/subdir">
  • 如果多个<Directory>部分适用于同一目录,则它们按照配置文件的顺序进行处理。

这会使你的案子变得有点困难。

从第二条语句中,我认为只需要切换两个<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)">。在这种情况下,顺序并不重要,您将不得不寻找其他解决方案。

我现在无法测试它,所以只需尝试切换这两个语句。

相关内容