php重定向无法正常工作

时间:2016-07-19 14:26:50

标签: php redirect header

我的主页上有一个简单的重定向,它会对智能手机或平板电脑上的用户做出反应。该类正在工作,并在智能手机上打开侧面时返回true。

因此,如果我在if语句中写一个echo,它就会被回显。但重定向并不起作用,我无法理解它。任何人都知道我错过了什么?

include ('includes/Mobiledetecter.php');                 
$detect = new Mobiledetecter;                                  
                                 //
if($detect->isMobile() or $detect->isTablet()) {           
    header('Location: http://www.example.com/');
} 

4 个答案:

答案 0 :(得分:6)

如果没有别的事情要做,请在设置标题后立即退出:

if($detect->isMobile() or $detect->isTablet()) {           
    header('Location: http://www.example.com/');
    exit;
} 

还要考虑只有在您尚未向浏览器发送输出时才能使用标头,无论是显式(例如:echo)还是隐式(例如:通过任何包括包含此标题的<?php标记前的空格

答案 1 :(得分:2)

确保您的代码在任何输出之前位于脚本的最顶部,并确保您的开始php标记之前没有空白字符。从本质上讲,您的脚本应该如下所示:

<?php // NOTICE THAT THERE IS NO SPACE BEFORE <?php & NO ECHO BEFORE header(...)

    include ('includes/Mobiledetecter.php');                 
    $detect = new Mobiledetecter;                                  
                             //
    if($detect->isMobile() or $detect->isTablet()) {           
        header("Location: http://www.example.com/");
        exit;
    } 

答案 2 :(得分:1)

除了其他人都正确地说你不能同时回应并进行服务器端重定向之外,这里有一种说话方式然后重定向:

include ('includes/Mobiledetecter.php');                 
$detect = new Mobiledetecter;                                  
                                 //
if($detect->isMobile() or $detect->isTablet()) {           
     echo "Redirecting you to the example website";
     echo "Click <a href='http://www.example.com/'>here</a> if you are not redirected within 5 seconds";        
     echo "<script> setTimeout(function () { window.location.href='http://www.example.com/'; }, 3000);</script>"
     exit;
} 

答案 3 :(得分:1)

在标题之前尝试ob_end_clean函数: http://php.net/manual/fr/function.ob-end-clean.php