PHP重定向不起作用(基于用户代理字符串)

时间:2013-11-13 16:16:50

标签: php user-agent

我正在运行以下重定向脚本:

<?php
$badAgents = array('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0');
if(in_array($_SERVER['HTTP_USER_AGENT'],$badAgents)) {
require("1.php");
} else {
require("2.php");
}
?>

然而,无论用户代理如何,每个访问者都会被发送到“2.php”。例如我进入Firefox,我得到2.php,我进入Internet Explorer,我看到2.php。

请有人指导我做错了吗?

感谢您的时间

2 个答案:

答案 0 :(得分:3)

检查我们的逻辑。

这是你正在使用的伪逻辑:

  • 如果用户的用户代理不正确,则需要1.php。
  • 如果用户没有错误的用户代理,则需要2.php。

除非用户使用正确版本的Firefox访问您的网页,否则您使用的代码将不会使用1.php。

我还建议您更改代码,如下所示:

if (stripos($_SERVER['HTTP_USER_AGENT'], 'firefox') === false) {
    require '2.php';
} else {
    require '1.php';
}

答案 1 :(得分:0)

你的字符串有点长到匹配。当你只过滤一个简短但明确的字符串如 Firefox 时,它会更好。

<?php
if(stripos($_SERVER['HTTP_USER_AGENT'], 'firefox') !== false)) {
    require("1.php");
} else {
    require("2.php");
}
?>

然后你的变化比“规则”匹配更大。

第二,有一些功能可以解析用户代理,例如 get_browser ,您可以获得更好的结果。