我需要使用 htpasswd 保护某些位置,并且可以正常工作:
<Location /myloc>
AuthType Basic
AuthName "My Protected Area"
AuthUserFile .htpasswd
Require valid-user
</Location>
但是我需要以某种方式绕过该 Auth,例如 url /myloc/loc1 但不是 /myloc/loc2。这样做的原因是我希望能够获得例如 loc1 并进行一些数据库搜索。例如:
"select Status From table where url=/myloc/requested_loc" (loc1 or loc2 or any name)
if Status == 1
return 1
else
return 0
所以场景如下:
- 在浏览器提示输入用户/密码之前执行一些脚本
- 如果脚本返回 0 提示用户/密码 如果脚本返回 1 不提示用户/密码并打开位置
一些想法: 1.我正在考虑修改https://github.com/winlibs/apache/blob/master/2.4.x/modules/aaa/mod_auth_basic.c 但我不确定这是一个好主意(我是当然这是个糟糕的主意)。
- 要有一些 ScriptAlias /myloc /opt/script.py 来检查我在数据库中需要什么,然后如果 1 打开位置,如果 2 发送到浏览器需要 401 身份验证。
我的想法到此结束。
我不是在寻找解决方案,只是在追求这个方向的几个想法。
解决方案和更新
我太愚蠢了,我根本不会在 /myloc 上进行身份验证。我将对动态创建的文件 loc1.conf、loc2.conf 等进行身份验证,然后将其包含在 apache 虚拟主机配置中。
<VirtualHost *:80>
domain
......
Include /path/loc1.conf
Include /path/loc2.conf
....
</VirtualHost>
@HBrijn给了我这个想法。
您需要研究 Apache 如何合并指令和设置优先级。
<Location>
部分按照它们在配置文件中出现的顺序进行处理,因此类似下面的内容应该允许未经授权/未经身份验证的访问者访问 /myloc/loc1/:从 Apache 2.3 开始,您可以使用授权容器来表达更复杂的授权逻辑。