对apache感到困惑

问题描述 投票:0回答:1

我正在尝试在我的 apache2.conf 中的 Location 或 Directory 块中使用 apache IF ELSE 来限制一次访问所有虚拟主机中的所有文件和目录。

只允许美国和加拿大的用户访问任何内容。我安装了 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>
apache if-statement configuration location
1个回答
0
投票

试试这个……

SetEnvIf COUNTRY_CODE ^(US|CA) AllowCountry=1

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

或者为什么不跳过 SetEnvIf 而只做……

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

未经测试。如果需要调整,很高兴更新。希望你明白了 - 将环境变量 设置为 并明确检查它或直接在条件中检查 COUNTRY_CODE 环境变量。

还有这个可能值得注意……

环境变量排序 在某个条件下查找环境变量时,重要的是要考虑此解决方案在请求处理中有多早发生。作为准则,在虚拟主机上下文(目录、位置、htaccess)之外定义的任何指令不太可能有机会执行。虚拟主机范围内的 SetEnvIf 是在此解析之前运行的一个指令

当在外部使用 reqenv 时,解析通常会稍后发生,但确切的时间取决于表达式在其中使用的指令。

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.