Apache 2.4要求ip无法正常工作

时间:2015-03-30 21:00:11

标签: wordpress apache .htaccess

尝试从较旧的允许,拒绝,订购语法到新的保护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>

这就是我在WordPress mod重写信息下的根目录.htaccess中所拥有的。

# Protect WordPress
ErrorDocument 401 default
ErrorDocument 403 default

<Files wp-login.php>
    <RequireAny>
        Require ip 50.153.218.4
    </RequireAny>
</Files>

但我只是不断收到403 Forbidden错误。当我在IP下添加Require All Granted时,它可以正常工作,但这会将其打开给每个用户。似乎apache只是没有正确读取我的IP?任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分:5)

你的语法对我来说非常好。

我认为apache可能无法正确读取用户IP的唯一原因是,如果您在代理或负载均衡器之后。如果是这种情况,您可以使用X-Forwarded-For代替ip。在PHP中,您可以通过比较$_SERVER['REMOTE_ADDR']$_SERVER['HTTP_X_FORWARDED_FOR']来确认您是否在代理服务器后面。

如果这不是问题,那么您可能会更好地在ServerFault找到答案。

我可以为你提供一些解决方法。最简单的解决方案可能是使用几个WordPress security plugins中的一个,允许您通过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>

您还应该能够使用&#34;允许,拒绝&#34;语法。