apache - 在 Apache .htaccess 中使用两个环境变量来阻止访问
问题描述
我正在使用 SetEnvIf 和 Deny 来阻止访问我的 .htaccess 中的某些国家/地区。
但是我需要从这个阻塞中排除某些 URL,因此我为这些 URL 设置了另一个环境变量。
如何根据变量 1 和变量 2 的组合拒绝?
SetEnvIf GEOIP_COUNTRY_CODE xx BlockedCountry
SetEnvIf Request_URI "^/important" NeverBlock
在伪代码中,我现在想这样做:
Deny from env=BlockedCountry && !NeverBlock
解决方案
来自Apache 文档:
语法:拒绝所有|host|env=[!]env-variable [host|env=[!]env-variable] ...
这意味着您可以一个接一个地组合条件(两者之间没有“布尔”运算符)。
所以在你的情况下,它应该看起来像这样
Deny from env=BlockedCountry env=!NeverBlock
更新
从您所说的来看,这似乎暗示了一个OR
条件而不是AND
(您想要的)。为此,您可以使用此解决方法
SetEnvIf GEOIP_COUNTRY_CODE xx MustBeBlocked
SetEnvIf Request_URI "^/important" !MustBeBlocked
Deny from env=MustBeBlocked
使用这种技术,您可以根据情况设置/取消设置环境变量,从而模拟AND
条件。
推荐阅读
- django - django 获取最后插入的不同行
- javascript - 如何避免 OVER_QUERY_LIMIT nodejs
- vue.js - Vue 中的模块样式和作用域样式有什么区别?
- sql - 从动态字符串返回列名
- javascript - 为什么我无法获得变量中的值?
- ios - Error while compiling the project with an Xcode 9.3
- python - Python: finding the index of a list into a list of list
- c# - 订阅验证错误处理
- python-3.x - How to Play Sound in Odoo with Single Device Running
- angular - 从后端服务器访问图像的 URL 格式