试图去从旧的允许,拒绝,为了语法到新的,以确保WordPress管理部分,但我不能让它认识到我的IP。
这就是我.htaccess
文件包含/wp-admin
文件夹。
ErrorDocument 401 default
ErrorDocument 403 default
# Disallow access for everyone except these IPs
<RequireAny>
Require ip 50.153.218.4
</RequireAny>
# Allow plugin access to admin-ajax.php around password protection
<Files admin-ajax.php>
<RequireAll>
Require all granted
</RequireAll>
</Files>
这就是我对.htaccess
下WordPress的国防部重写信息的根源。
# Protect WordPress
ErrorDocument 401 default
ErrorDocument 403 default
<Files wp-login.php>
<RequireAny>
Require ip 50.153.218.4
</RequireAny>
</Files>
但我只是不断得到403 Forbidden错误。 当我需要添加所有准许下的IP,它工作正常,但打开它给每一个用户。 它看起来像阿帕奇只是不正确地读我的IP? 任何人有任何想法,我做错了什么?
你的语法看起来完全正常的我。
我能想到的是阿帕奇可能无法正确读取用户的IP的唯一原因是,如果你使用代理或负载平衡器。 如果是这样的话,你将使用X-Forwarded-For
代替ip
。 在PHP中,你可以,如果你使用代理通过比较确认$_SERVER['REMOTE_ADDR']
和$_SERVER['HTTP_X_FORWARDED_FOR']
如果这不是问题,所以你可能有更好的运气找到上述问题的回答ServerFault 。
我可以为您提供,虽然一些解决方法。 最简单的解决办法可能是使用的几个WordPress的一个安全插件 ,使您可以限制通过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
));
}
}
});
更新:从评论它看起来像这牵涉到代理。 这应该工作:
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>
和
# 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>
你也应该能够使用通过“允许,拒绝”语法类似的方法。