Apache locationmatch 负面正则表达式

Apache locationmatch 负面正则表达式

我正在尝试通过 Apache 公开一个位置。通常,我的虚拟主机中有这个块,内容是

<Location />
    AuthType Basic
    AuthUserFile /web/.htpasswd
    AuthName "Test Site"
    Require valid-user
</Location>

这很好用 - 提供的所有服务都需要有效用户。现在我想公开一个不需要身份验证的服务,所以我正在寻找一种方法来让除 /services 之外的所有位置都需要身份验证。我一直在使用 LocationMatch,但我并不完全清楚它在做什么。

<LocationMatch ^/(?!services)[^.]*$>
AuthType Basic
...
</LocationMatch>

允许 /services 及其下的所有内容跳过 LocationMatch,但它有允许 example.com/.somefile 绕过 LocationMatch 块的副作用。

此外,当我尝试

<LocationMatch ^/(?!services)>
AuthType Basic
...
</LocationMatch>

所有内容(包括/services)都与 LocationMatch 匹配。

如果有人能告诉我 [^.]* 类做了什么而第二个测试没有做,以及如何仅公开 /services 同时保持所有其他路径处于身份验证之下,我将不胜感激。

答案1

本页由 Antonio Lorusso 提供建议执行以下操作将文件夹从 apache 身份验证中排除:

<Location "/">
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /var/www/clients/client12/web17/passwd
AuthGroupFile /dev/null
Require valid-user
SetEnvIf Request_URI "^/(admin|skin|js|index)(.*)$" allow
SetEnvIf Request_URI "^/favicon.ico$" allow
Order allow,deny
Allow from env=allow
Satisfy Any
</Location>

在这种情况下,以 /admin、/skin、/js 或 /index 开头的 URL 将被 auth 忽略。

本节对您来说关键的部分是:

SetEnvIf Request_URI "^/(admin|skin|js|index)(.*)$" allow

在你的情况下适当的代码将是:

SetEnvIf Request_URI "^/services(.*)$" allow

_

答案2

嗯,[^.]意思是“不是.”,这就是为什么/.somefile不匹配。最后一个示例不起作用的一个可能原因是,只有从 Apache 2.0 开始才支持与 Perl 兼容的正则表达式,因此如果您使用的是 Apache 1.3(您确实应该在问题中指定 Apache 版本),那就只能这样了。

答案3

维护

<Location />
  AuthType Basic 
  AuthUserFile /web/.htpasswd
  AuthName "Test Site"
  Require valid-user
</Location>

并添加这个新位置

<Location /services>
  Satisfy any
  Order deny,allow
</Location>

答案4

尝试了很多方法都没有成功。
最后这个在 apache 2.2 上成功了。

  • 两条路径未经授权,其他路径未经授权
  • 我添加了从 / 到 /ui 的重写,以便实现

以下是 LocationMatch 指令的使用方法

  <LocationMatch /(firstpath|secondpath).*>
            AuthType Basic
            AuthName "Restricted AREA "
            AuthUserFile /etc/apache2/security/password
            AuthGroupFile /etc/apache2/security/group
            Require group admin
            Order allow,deny
            Allow from 127.0.0.1
            Allow from 10.0.0.0/24
            Allow from env=allowclient

            Satisfy any
    </LocationMatch>

相关内容