Apache 再次合并位置部分

Apache 再次合并位置部分

我读这个答案回答了前段时间提出的一个类似问题,它很有道理,并且与 Apache 2.4 文档相符。但我有以下经历,这似乎与该答案和文档相矛盾。考虑以下指令:

<Directory "/opt/lampp/htdocs/foo">
    AuthName "foo user"
    AuthType Basic
    Authuserfile /opt/lampp/passwds/foo.users
</Directory>
<VirtualHost *:80>
    ServerName   foo.example.com
    DocumentRoot "/opt/lampp/htdocs/foo/public"
    ErrorLog     "logs/foo.error_log"
    <Location />
        Require valid-user
    </Location>
    <Location /wp/feed>
        Require all granted
    </Location>
    CustomLog    "logs/foo.access_log" combined
</VirtualHost>

显然,其目的是使用 http 基本身份验证来保护所有 URL,除了对于下面的网址/wp/feed。但重新加载 apache 后,我在转到 时会提示我输入凭据/wp/feed。该网址与两个位置路径匹配,因此 apache 应该先处理,Require valid-user然后处理Require all granted,而我不应该被提示。只是为了“好玩”,我尝试切换位置块的顺序,但仍然会提示。我发现唯一能按预期工作的方法就是完全删除“/”的位置块。对我来说,这也是意料之外的行为,因为在这种情况下,根本没有任何Require valid-user指令应该应用于不匹配的网址/wp/feed。然而,它们却被应用了,因为我被提示输入所有不匹配的网址/wp/feed

有人能解释一下吗?我是不是没能理解答案?文档

使用 nginx 指令指定此行为没有问题,其中最长前缀匹配通常获胜。如果我得到的确实是预期的行为,我该如何使用 apache 获得我想要的结果?

相关内容