Я хочу, чтобы GeoIP проверил в VirtualHost
и в случае успеха получил файл .htaccess
обрабатываемой веб-страницы, который также имеет некоторые установленные директивы Require
(для ее файлов).
Я использую макросы и переменные окружения для динамических c конфигов, поэтому в настоящее время моя конфигурация vhost выглядит следующим образом:
<VirtualHost ${myIP4}:443>
...
<Directory "/srv/www/$domain/htdocs">
MaxMindDBEnable On
MaxMindDBFile COUNTRY_DB /var/lib/GeoIP/GeoLite2-Country.mmdb
MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code
SetEnvIf MM_COUNTRY_CODE "^$countries" PassCountry
AllowOverride None
Require all denied
Require env PassCountry
</Directory>
Это прекрасно работает, когда доступ к $countries
должен быть отменен, так как Require all denied
выигрывает. Но когда это правильный код страны, должен быть выполнен файл .htaccess, для которого мне понадобится AllowOverride All
.
Я пробовал несколько способов, например
<If "reqenv('PassCountry') == 1">
AllowOverride All
</If>
, но если Предложение, похоже, не оценивается правильно.
Но это не единственная проблема. Также при добавлении в дерево else (для целей тестирования)
<Else>
AllowOverride All
</Else>
он не распознается, хотя и говорит, что его можно использовать в предложениях if.
Только директивы, которые Поддержка контекста каталога может быть использована в этом разделе конфигурации.
см. https://httpd.apache.org/docs/2.4/en/mod/core.html#if
Итак, как я могу решить мою проблему?