我正在尝试通过 Apache 公开一个位置。通常,我的 vhost 中有这个块,上面写着
<Location />
AuthType Basic
AuthUserFile /web/.htpasswd
AuthName "Test Site"
Require valid-user
</Location>
Run Code Online (Sandbox Code Playgroud)
这工作得很好 - 提供的一切都需要一个有效的用户。现在我想公开一个不需要身份验证的服务,所以我正在寻找一种方法来使除 /services 之外的所有位置都需要身份验证。我一直在玩 LocationMatch,但我并不完全清楚它在做什么。
<LocationMatch ^/(?!services)[^.]*$>
AuthType Basic
...
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
允许 /services 及其下面的所有内容跳过 LocationMatch,但它具有允许 example.com/.somefile 绕过 LocationMatch 块的副作用。
此外,当我尝试
<LocationMatch ^/(?!services)>
AuthType Basic
...
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
一切(包括 /services)都由 LocationMatch 匹配。
如果有人能告诉我 [^.]* 类做了什么而第二个测试没有,以及如何在保持所有其他路径经过身份验证的同时只公开 /services ,我将不胜感激。
嗯,[^.]
意思是“不是.
”,这就是/.somefile
不匹配的原因。您的最后一个示例不起作用的一个可能原因是因为仅从 Apache 2.0 开始支持与 Perl 兼容的正则表达式,因此如果您使用 Apache 1.3 (您确实应该在问题中指定 Apache 版本),那么就这样吧。