如何在Apache的基本身份validation之前执行脚本?

我需要用htpasswd来保护一些位置,并且可以正常工作

<Location /myloc> AuthType Basic AuthName "My Protected Area" AuthUserFile .htpasswd Require valid-user </Location> 

但我需要以某种方式绕过Auth例如url / myloc / loc1而不是/ myloc / loc2。 原因是我想能够得到例如loc1和做一些数据库search。 例如:

 "select Status From table where url=/myloc/requested_loc" (loc1 or loc2 or any name) if Status == 1 return 1 else return 0 

所以情景如下:

  1. 在浏览器提示用户/通过之前执行一些scritp
  2. 如果脚本返回0提示用户/通过脚本返回1不提示用户/通过和打开位置

一些想法:1.我想修改https://github.com/winlibs/apache/blob/master/2.4.x/modules/aaa/mod_auth_basic.c,但我不知道这是一个好主意(我是肯定这是可怕的想法)。

  1. 要有一些ScriptAlias / myloc /opt/script.py这将检查我需要在数据库中,然后如果1打开位置,如果2发送到浏览器401身份validation所需。

在那里我的想法结束了。

我不是在寻找解决scheme,只是在追求这个方向的几个想法。

解决scheme和更新

我很愚蠢我根本不会在/ myloc上进行身份validation。 我将对dynamic创build的文件loc1.conf,loc2.conf等进行Authvalidation,然后将其包含在Apache虚拟主机configuration中。

 <VirtualHost *:80> domain ...... Include /path/loc1.conf Include /path/loc2.conf .... </VirtualHost> 

@HBruijn给了我这个想法。

您需要调查Apache如何合并指令和设置优先级 。

<Location>部分按照它们在configuration文件中出现的顺序进行处理,所以类似下面的内容应允许未经授权/未经身份validation的访问者访问/ myloc / loc1 /:

 <VirtualHost *:80> ServerName example.org DocumentRoot /var/www/ <Location /myloc/loc1/> Order allow,deny Allow from all </Location> <Location /myloc/> AuthType Basic AuthName "My Protected Area" AuthUserFile .htpasswd Require valid-user </Location> </VirtalHost> 

从Apache 2.3可以使用授权容器来expression更复杂的授权逻辑。