htaccess"命令"拒绝,允许,拒绝

Gai*_*aia 36 apache .htaccess

我想只允许一个国家访问,但在此国家/地区内排除代理.

这就是我所拥有的(为方便起见,缩短版本)

<Limit GET POST>
order deny,allow
deny from all
allow from 139.82.0.0/16
allow from 143.54.0.0/16
allow from 186.192.0.0/11
allow from 186.224.0.0/11
.
deny from 186.201.27.66
deny from 186.201.196.1
deny from 186.214.51.231
deny from 186.237.225.26
</Limit>
Run Code Online (Sandbox Code Playgroud)

但我知道这不行.我该怎么做呢?

reg*_*ero 124

更新:为新的apache 2.4直接跳到最后.

订单关键字及其与关系DenyAllow指令是一个真正的噩梦.理解我们如何最终得到这样的解决方案将是非常有趣的,至少可以说是非直观的解决方案.

  • 第一个重要的一点是,Order关键字将有关于如何有很大的影响Allow,并Deny指示使用.
  • 其次,DenyAllow指令没有在它们被写入的顺序应用,它们必须被视为两个不同的块(一个用于Deny指令,一个用于Allow).
  • 第三,它们完全不像防火墙规则:应用所有规则,过程不会在第一场比赛停止.

您有两种主要模式:

订单拒绝,允许模式,或允许,任何人-除了-这个列表,或者,也许,不

Order Deny,Allow
Run Code Online (Sandbox Code Playgroud)
  • 这是默认模式下的允许.您可以选择指定Deny规则.
  • 首先,Deny规则拒绝了一些请求.
  • 如果有人被拒绝,你可以带回来Allow.

我会把它改为:

Rule Deny
     list of Deny rules
Except
     list of Allow rules
Policy Allow (when no rule fired)
Run Code Online (Sandbox Code Playgroud)

订单允许,拒绝模式,或拒绝,每个人除外,这个列表,或者,也许,不

Order Allow,Deny
Run Code Online (Sandbox Code Playgroud)
  • 这是默认模式下的拒绝.所以你通常指定Allow规则.
  • 首先,某人的请求必须至少匹配一条Allow规则.
  • 如果有人匹配Allow,你仍然可以拒绝他们Deny.

以简化形式:

Rule Allow
     list of Allow rules
Except
     list of Deny rules
Policy Deny (when no rule fired)
Run Code Online (Sandbox Code Playgroud)

回到你的情况

您需要允许作为国家/地区网络的网络列表.在这个国家/地区,您希望排除某些代理的IP地址.

您已采用allow-anyone-except-this-list-or-maybe-not模式,因此默认情况下任何人都可以访问您的服务器,但Deny列表中列出的代理的IP除外,但如果它们被拒绝,您仍然允许国家/地区网络.这太宽泛了.不好.

通过反转order allow,deny你将处于拒绝 - 每个人 - 除了这个列表 - 或者 - 可能 - 不是模式.因此,您将拒绝访问所有人,但允许国家/地区网络,然后您将拒绝代理.当然,你必须删除Deny from all@Gerben和@Michael Slade所述的内容(这个答案只能解释他们写的内容).

Deny from all通常出现与order deny,allow以除去默认允许访问并作一个简单的,可读的配置.例如,在此之后指定允许的IP列表.您不需要该规则,您的问题是3路访问模式的完美案例(默认策略,例外,例外例外).

但设计这些设置的人肯定是疯了.

所有这些都不推荐使用Apache 2.4

整个授权方案已在Apache 2.4中使用RequireAll,RequireAnyRequireNone指令进行了重构.例如,参见这个复杂的逻辑示例.

所以旧的奇怪Order逻辑变成了遗物,引用新文档:

控制授权的执行方式和顺序在过去一直是个谜


Fel*_*elk 6

不直接回答OP的问题,而是对于那些发现这个问题以寻求澄清 和 之间的区别的allow,denydeny,allow

将逗号读作“但是”。

  • allow but deny:白名单,但有例外。
    一切都被拒绝,除了允许列表中的项目,除了拒绝列表中的项目
  • deny but allow: 黑名单(例外情况)。
    一切都被允许,除了拒绝列表上的项目,除了允许列表上的项目

只允许一个国家访问,但排除该国家内的代理

OP 需要一个有例外的白名单,因此allow,deny而不是deny,allow