2

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

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

请有人指导我我做错了什么?

感谢您的时间

4

2 回答 2

3

检查我们的逻辑。

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

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

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

我还建议您按如下方式更改代码:

if (stripos($_SERVER['HTTP_USER_AGENT'], 'firefox') === false) {
    require '2.php';
} else {
    require '1.php';
}
于 2013-11-13T16:24:15.393 回答
0

您的字符串有点长,无法匹配。最好只过滤一个简短但明确的字符串,例如Firefox

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

那么你的变化比“规则”匹配的要大。

第二个是有一些函数可以解析用户代理,比如get_browser,你可以得到更好的结果。

于 2013-11-13T16:25:16.317 回答