我的主页上有一个简单的重定向,它会对智能手机或平板电脑上的用户做出反应。该类正在工作,并在智能手机上打开侧面时返回true。
因此,如果我在if语句中写一个echo,它就会被回显。但重定向并不起作用,我无法理解它。任何人都知道我错过了什么?
include ('includes/Mobiledetecter.php');
$detect = new Mobiledetecter;
//
if($detect->isMobile() or $detect->isTablet()) {
header('Location: http://www.example.com/');
}
答案 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