我尝试在apache2中的Location或Directory块中使用apacheIF ELSE。conf可一次性限制对所有虚拟主机中的所有文件和目录的访问。
只有在美国和加拿大的用户应该被允许访问任何东西。我已经安装了MaxMind GeoIP2模块和数据库,并且正确设置了环境变量。但是,我一定是误解了SetEnvIf或If是如何工作的。或者也许我没有访问环境变量的权限?
有人能告诉我我做错了什么吗
<IfModule mod_maxminddb.c>
MaxMindDBEnable On
MaxMindDBFile COUNTRY_DB /var/lib/GeoIP/GeoIP2-Country.mmdb
MaxMindDBFile CITY_DB /var/lib/GeoIP/GeoLite2-City.mmdb
MaxMindDBEnv COUNTRY_CODE COUNTRY_DB/country/iso_code
MaxMindDBEnv COUNTRY_NAME CITY_DB/country/names/en
MaxMindDBEnv CITY_NAME CITY_DB/city/names/en
MaxMindDBEnv REGION_CODE CITY_DB/subdivisions/0/iso_code
</IfModule>
<Location />
SetEnvIf COUNTRY_CODE ^(US|CA) AllowCountry
<If "-T env('AllowCountry')">
Require all granted
</If>
<Else>
Require all denied
</Else>
</Location>
1条答案
按热度按时间xytpbqjk1#
试试这个...
或者为什么不跳过SetEnvIf,直接做。..
未经测试。如果需要调整,很高兴更新。希望你明白了这个想法-将env var * 设置为 *,然后显式地检查它,或者直接在条件中检查COUNTRY_CODE env var。
这也可能值得注意。..
环境变量排序当在条件中查找环境变量时,必须考虑在请求处理的多早时间内发生此解析。作为指导原则,任何在虚拟主机上下文(目录,位置,htaccess)之外定义的指令都不太可能有机会执行。虚拟主机范围中的SetEnvIf是在此解析之前运行的一个指令
当在之外使用reqenv时,解析通常会稍后发生,但确切的时间取决于在其中使用表达式的指令。
希望能帮上忙。