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::/32
CIDR 表示法 (例子)。
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 处理不同模块的方式不同)。