根据 IP 地址重定向访问者

Posted

技术标签:

【中文标题】根据 IP 地址重定向访问者【英文标题】:Redirect visitors based on IP address 【发布时间】:2015-03-01 19:06:01 【问题描述】:

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

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

这可能吗?我见过很多看起来一样的问题,但没有一个能真正回答我的问题。

【问题讨论】:

您可以通过将其拆分为 2 个问题来研究这个问题:识别用户的地址和重定向。你应该能够找到大量的例子。此外,您可能需要考虑在 Web 服务器级别执行此操作。 【参考方案1】:

这个怎么样?

<?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 ...

?>

希望它有效!

【讨论】:

它会起作用,但如果放入index.php会导致无限重定向,反转条件逻辑应该没问题。 我当然是假设脚本没有在index.php上运行。 我看到了,打败我;p 感谢您的帮助,我选择了 .htaccess 文件的答案。只是因为那个现在是空的,我更容易编辑。【参考方案2】:

有几种方法可以做到这一点,因为您的问题中有 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]\.

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

您也可以将这些指令放入 server/vhost 配置文件中,它会比 htaccess 文件更快地工作。

【讨论】:

以上是关于根据 IP 地址重定向访问者的主要内容,如果未能解决你的问题,请参考以下文章

Nginx的location匹配规则-根据url 路径重定向到不同的IP

apache2:根据 url 重定向到 IP 地址(容器地址)

IP地址重定向

获取任何支持图像重定向(如***)的html页面的访问者的IP地址和浏览器代码

Tomcat:如何将外部IP地址访问重定向到其他位置

地理定位网站的网站结构