使用页面模板限制基于IP的访问(前端)

时间:2016-03-03 作者:Circuit Circus

我找到了this 建议通过向包含IP地址白名单的init hook添加函数来限制对整个WP站点的访问。我试图将其改写为只限制特定模板的页面的条件。这将有助于我将公司WP博客用于内部网(我们仍在使用一个弃用的TYPO3网站,这是a**管理中的一个难题)。然而,我的代码似乎并没有限制任何人。你能帮我一下吗?下面是我当前的代码(在functions.php中):

function intranet() {
    $ip = $_SERVER[\'REMOTE_ADDR\'];
    $whitelist = array(\'172.18.131.26\',\'[plenty of others within the local network...]\');
    if(!in_array($ip, $whitelist) && is_page_template(\'page_intra.php\')){
        header(\'HTTP/1.1 401 Unauthorized\');
    }
}
add_action(\'init\', \'intranet\');
文件page-intra.php 只是泛型的副本page.php 如果这有帮助的话。

1 个回复
最合适的回答,由SO网友:Circuit Circus 整理而成

现在我让它工作了!与此同时,杰夫·科恩(JeffCohan)也给出了正确的建议(见他对这个问题的评论)。这是我的全部代码,按照他建议的方式工作:

function getUserIP() {
    $client  = @$_SERVER[\'HTTP_CLIENT_IP\'];
    $forward = @$_SERVER[\'HTTP_X_FORWARDED_FOR\'];
    $remote  = $_SERVER[\'REMOTE_ADDR\'];

    if      (filter_var($client, FILTER_VALIDATE_IP))   {$ip=$client;}
    elseif  (filter_var($forward, FILTER_VALIDATE_IP))  {$ip=$forward;}
    else    {$ip = $remote;}
    return $ip;
} $ip=getUserIP();
$whitelist = array(\'172.18.131.26\',\'172.18.131.254\');
if(!in_array($ip, $whitelist))    {
    // Here comes the markup for some Error Message on the page if requested from outside
    ?><!doctype html><html><head><meta charset="utf-8"><meta name="robots" content="noindex, nofollow" /><title>Access denied</title></head><body><div id="wrapper"><h1>401: Access Denied</h1><p>You\'re not allowed to view the requested page.</p></div></body></html><?php
} else {
    // Buisness as usual, the generic wp page loop 
    get_header(); ?>

            <div id="container">
                <div id="content" role="main"></div><!-- #content -->
            </div><!-- #container -->

    <?php
    get_sidebar();
    get_footer();
}
?>
这些代码都在page-intra.php 现在,不要利用functions.php 或者别的什么。现在,您只需在添加新页面时选择模板,即可完成添加。