0

有人可以检查这段代码吗?我知道我可以/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;
}
?>
4

1 回答 1

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;
    }
?>
于 2013-06-06T21:58:27.333 回答