对apache感到困惑

1wnzp6jl  于 2023-05-01  发布在  Apache
关注(0)|答案(1)|浏览(193)

我尝试在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>
xytpbqjk

xytpbqjk1#

试试这个...

SetEnvIf COUNTRY_CODE ^(US|CA) AllowCountry=1

<If "reqenv('AllowCountry') == '1'">

或者为什么不跳过SetEnvIf,直接做。..

<If "reqenv('COUNTRY_CODE') =~ /^(US|CA)/">

未经测试。如果需要调整,很高兴更新。希望你明白了这个想法-将env var * 设置为 *,然后显式地检查它,或者直接在条件中检查COUNTRY_CODE env var。
这也可能值得注意。..
环境变量排序当在条件中查找环境变量时,必须考虑在请求处理的多早时间内发生此解析。作为指导原则,任何在虚拟主机上下文(目录,位置,htaccess)之外定义的指令都不太可能有机会执行。虚拟主机范围中的SetEnvIf是在此解析之前运行的一个指令
当在之外使用reqenv时,解析通常会稍后发生,但确切的时间取决于在其中使用表达式的指令。
希望能帮上忙。

相关问题