配置.htaccess限制仅Cloudflare IP访问后出现HTTP 403 Forbidden问题求助
配置.htaccess限制仅Cloudflare IP访问后出现HTTP 403 Forbidden问题求助
看起来你遇到的核心问题是对<RequireAll>容器的逻辑理解偏差,这直接导致了所有请求都被拒绝的403错误,咱们一步步拆解问题:
最可能的原因:<RequireAll>的逻辑矛盾
你当前的配置里,<RequireAll>要求容器内的所有条件必须同时满足,但你同时写了Require all denied和一堆Require ip ...——这相当于要求请求既要被“完全拒绝”,又要“来自指定的Cloudflare IP段”,这两个条件永远不可能同时成立,自然所有请求都会触发403 Forbidden。
正确的配置写法
把<RequireAll>换成<RequireAny>,或者干脆去掉容器(Apache默认的Require逻辑就是“只要有一个条件满足就允许”),修改后的配置如下:
# Cloudflare Firewall Bypass Prevention Require all denied Require ip 103.21.244.0/22 Require ip 103.22.200.0/22 Require ip 103.31.4.0/22 Require ip 104.16.0.0/13 Require ip 104.24.0.0/14 Require ip 108.162.192.0/18 Require ip 131.0.72.0/22 Require ip 141.101.64.0/18 Require ip 162.158.0.0/15 Require ip 172.64.0.0/13 Require ip 173.245.48.0/20 Require ip 188.114.96.0/20 Require ip 190.93.240.0/20 Require ip 197.234.240.0/22 Require ip 198.41.128.0/17 Require ip 2400:cb00::/32 Require ip 2606:4700::/32 Require ip 2803:f800::/32 Require ip 2405:b500::/32 Require ip 2405:8100::/32 Require ip 2a06:98c0::/29 Require ip 2c0f:f248::/32
或者用<RequireAny>明确指定逻辑(可读性更强):
# Cloudflare Firewall Bypass Prevention <RequireAny> Require ip 103.21.244.0/22 Require ip 103.22.200.0/22 # 其他所有Cloudflare IP段... </RequireAny>
(这种写法不需要Require all denied,因为<RequireAny>之外的请求默认会被拒绝,保险起见也可以加上,但逻辑上只要指定允许的IP段即可)
其他可能的排查点
如果修改后还是出现403,你可以检查这几点:
- 确认服务器是否直接对接Cloudflare:如果你的服务器还在另一个反向代理(比如主机商的内部代理)后面,Apache看到的连接IP不是Cloudflare的,而是主机商代理的IP。这种情况下需要配置Apache信任该代理,让它通过
X-Forwarded-For头获取真实的Cloudflare IP(可以用RemoteIPHeader X-Forwarded-For和RemoteIPTrustedProxy指令配置)。 - 核对Cloudflare的最新IP段:虽然你说IP来自官方,但偶尔官方会更新IP段,你可以直接在服务器上执行
curl https://www.cloudflare.com/ips-v4和curl https://www.cloudflare.com/ips-v6来获取最新列表,对比你当前配置的是否完整。 - 做简单的有效性测试:直接访问服务器IP(绕过Cloudflare)应该触发403;通过域名(走Cloudflare)访问应该正常,这能快速验证配置是否生效。
备注:内容来源于stack exchange,提问作者anxiety
相关产品推荐
相关产品推荐

