在我的 .htaccess 文件中阻止 IPv6 地址但出现 500 内部服务器错误?

在我的 .htaccess 文件中阻止 IPv6 地址但出现 500 内部服务器错误?

2a01:598:xxx我想在.htaccess我的 WordPress 网站上的文件中阻止所有以此开头的 IP 地址。

但每次我编辑.htaccess文件时,我都无法再访问我的网站。我收到内部服务器错误。

添加代码.htaccess后,文件末尾如下:# END WordPress

Require all granted
Require not ip 2a01:598:

我也尝试过这种变化:

Require all granted
Require not ip 2a01:598:::

但什么都没起作用。即使我尝试像这样阻止我自己的 IPv4 地址:

Require all granted
Require not ip 11.222.33.444 (with my IP instead) 

我收到 500 内部服务器错误?

我不知道该怎么办。我只想2a01:598:在我的.htaccess文件中阻止所有以此开头的 IP 地址。

答案1

如果您收到 500 内部服务器错误,则需要检查服务器的错误日志以了解错误的详细信息。500 状态只是由于某些特定的服务器错误而返回给客户端的综合响应。

这里存在许多导致错误的问题......

Require not ip 2a01:598:
:
Require not ip 2a01:598:::

在这两种情况下,指定的 IPv6 地址2a01:598:2a01:598:::无效 - 因此出现 500 错误响应。您可以使用2a01:598::(2 个冒号),但这是具体的IPv6 地址2a01:598:0:0:0:0:0:0,这不是您所需要的。

对于 IPv4 地址,Apache 允许您使用部分 IP 地址(整个八位字节),例如203.0.113(无尾随点)。对于 IPv6 地址,您可能希望2a01:598获得允许,但是,这似乎不受支持,因为这再次导致 500 响应并记录“指定的 IP 地址无效”错误。

要指定 IPv6 地址范围,您需要使用 CIDR 表示法。例如,要指定“开始”的 IP 范围2a01:598:,您需要使用2a01:598::/32CIDR 表示法 (例子)。

Require all granted
Require not ip 11.222.33.444

当您Require以这种方式指定多个指令时,Apache默认值<RequireAny>容器中。否定指令(即Require not​​)不允许在<RequireAny>容器中使用;因此出现 500 错误。(“否定 Require 指令在指令中不起作用<RequireAny>”被记录为错误。)您需要<RequireAll>在这里明确使用容器。

参考:

解决方案

因此,您需要执行以下操作:

<RequireAll>
Require all granted
Require not ip 2a01:598::/32
</RequireAll>

.htaccess我的文件结束于# END WordPress

从逻辑上讲,这应该放在文件顶部附近.htaccess注释标记# BEGIN WordPress。阻塞指令应该放在第一位。但是,这可能并不重要(因为 Apache 处理不同模块的方式不同)。

相关内容