Мне нужно защитить какое-то место с помощью 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
Итак, сценарии следующие:
Некоторые идеи: 1. Подумывал доработать https://github.com/winlibs/apache/blob/master/2.4.x/modules/aaa/mod_auth_basic.c но я не уверен, что это хорошая идея (я уверен, что это ужасная идея).
И на этом мои идеи заканчиваются.
Я не ищу решения, просто несколько идей, в каком направлении это делать.
РЕШЕНИЕ И ОБНОВЛЕНИЕ
Я настолько глуп, что вообще не буду использовать Auth на / myloc. Я сделаю Auth для динамически создаваемых файлов loc1.conf, loc2.conf и так далее, а затем включу это в конфигурацию виртуального хоста apache.
<VirtualHost *:80>
domain
......
Include /path/loc1.conf
Include /path/loc2.conf
....
</VirtualHost>
@HBruijn дал мне эту идею.
Вам нужно выяснить, как Apache объединяет директивы и устанавливает приоритет.
<Location>
разделы обрабатываются в том порядке, в котором они появляются в файле конфигурации, поэтому что-то вроде следующего должно позволить неавторизованным / неаутентифицированным посетителям получить доступ к / 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 вы можете использовать контейнеры авторизации для выражения более сложной логики авторизации.