你的语法对我来说看起来非常好。
我认为 apache 可能无法正确读取用户 IP 的唯一原因是如果您位于代理或负载平衡器后面。如果是这种情况你会使用X-Forwarded-For
代替ip
。在 PHP 中,您可以通过比较来确认您是否位于代理后面$_SERVER['REMOTE_ADDR']
and $_SERVER['HTTP_X_FORWARDED_FOR']
.
如果这不是问题,那么您可能会更好地找到答案服务器故障 http://serverfault.com.
不过我可以为您提供一些解决方法。最简单的解决方案可能是使用几种 WordPress 之一安全插件 https://wordpress.org/plugins/better-wp-security/允许您通过 IP 地址限制对后端的访问。
或者,在您的主题或插件中,您可以实现相同类型的身份验证逻辑:
add_action('init', function() {
$allowed_ips = array('50.153.218.4');
if(is_admin() || $GLOBALS['pagenow'] == 'wp-login.php') {
if( !DOING_AJAX && !in_array($_SERVER['REMOTE_ADDR'], $allowed_ips) ) {
wp_die('', 'Forbidden' array(
'response' => 403
));
}
}
});
更新:从评论来看,似乎涉及代理。这should work:
ErrorDocument 401 default
ErrorDocument 403 default
SetEnvIF X-Forwarded-For "50.153.218.4" AllowIP
# Disallow access for everyone except these IPs
<RequireAny>
Require env AllowIP
</RequireAny>
# Allow plugin access to admin-ajax.php around password protection
<Files admin-ajax.php>
<RequireAll>
Require all granted
</RequireAll>
</Files>
and
# Protect WordPress
ErrorDocument 401 default
ErrorDocument 403 default
SetEnvIF X-Forwarded-For "50.153.218.4" AllowIP
<Files wp-login.php>
<RequireAny>
Require env AllowIP
</RequireAny>
</Files>
您还应该能够使用“允许、拒绝”语法的类似方法。