拆分preg_match或其他东西

时间:2013-04-30 13:27:23

标签: php preg-match

有人可以检查一下这段代码。我知道我可以使用/i来使这个案例不敏感。但是,即使我不是,我仍然会得到肯定有$ user_agent设置的访问者,但是我无法解决这个问题。

<?php
$user = $_SERVER['HTTP_USER_AGENT'];
if(preg_match("/android|linux|windows|Android|Linux|Windows/",$user))  {
header("Refresh:0;url=http://site.com/page.php/");
};
?>

<?php
$referrer = $_SERVER['HTTP_REFERER'];
if(preg_match("/term-one|term-two|term-three/",$referrer))  {
header("Refresh:0;url=http://site.com/page.php/");
exit;
}
?>

1 个答案:

答案 0 :(得分:0)

在您第一次exit;来电后,您错过了header()声明。 如果它通常看起来仍然有效,但您的代码将继续执行,如果我们的代码稍后会重新设置Refresh标头,则第一次重定向将永远不会发生。

此外,由于在网页完成加载后进行了刷新,因此您缺少exit表示您继续加载内容 - 包括(可能是谷歌分析代码),即使它们最终会向右刷新页面,他们仍然会被谷歌分析记录为首先加载此页面。

很明显,为什么您使用Refresh标题而不是Location标题进行重定向?

我推荐的代码是:

<?php
    $user = $_SERVER['HTTP_USER_AGENT'];
    if (preg_match("/android|linux|windows/i", $user)) {
        header("Location: http://site.com/page.php");
        exit;
    }
    $referrer = $_SERVER['HTTP_REFERER'];
    if (preg_match("/term-one|term-two|term-three/", $referrer))  {
        header("Location: http://site.com/page.php");
        exit;
    }
?>