根据IP地址重定向访问者

时间:2015-01-03 20:37:55

标签: php .htaccess ip

我创建了一个我想用IP地址块保护的页面。

访问example.com的所有人都应该重定向到example.com/block.php,除非我知道IP地址。我希望能够在某个列表中添加大量IP地址。在我将某人的IP地址添加到列表后,当他们再次访问example.com时,他们现在应该被重定向到example.com/index.php

这可能吗?我看到很多问题看起来都一样,但没有什么能真正回答我的问题。

2 个答案:

答案 0 :(得分:4)

有几种方法可以做到这一点,因为你的问题中有htaccess标记,我假设你正在寻找一个htaccess文件解决方案。

如果你没有使用apache 2.4(或更高版本),你可以使用mod_authz来处理所有的阻塞。像这样:

# this makes it so blocked IPs get shown the block.php page
ErrorDocument 403 /block.php

Order Allow,Deny
Deny from all

Allow from 1.2.3.4
Allow from 1.2.3.5
Allow from 5.6.7.8

etc...

在这里,您阻止所有内容并保留“允许来自”行的列表。如果要允许整个子网,可以缩短它们,例如

Allow from 1.2.3

将允许以1.2.3开头的IP。

你也可以使用mod_rewrite:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4$
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.5$
RewriteCond %{REMOTE_ADDR} !^5\.6\.7\.8$
RewriteRule ^ /block.php [L,F]

在这里,您可以更灵活,因为您可以使用正则表达式来匹配IP。所以你可以这样做:

RewriteCond %{REMOTE_ADDR} !^1\.2\.[3-6]\.

因此,这允许所有IP以:1.2.3,1.2.4,1.2.5和1.2.6开头。

您也可以将这些指令放入server / vhost配置文件中,而不是htaccess文件,它会更快一些。

答案 1 :(得分:2)

这个怎么样?

<?php
$allowed = array(
    '123.45.67.890',
    '456.45.67.890',
    '789.45.67.890',
);

if(!in_array($_SERVER['REMOTE_ADDR'], $allowed)) {
    header("Location: /block.php");
    exit();
}

// continue with code ...

?>

希望它有效!