我正在尝试重定向移动用户并尝试以下操作,但它实际上并没有重定向...
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
//print $ua;
$search = array('windows ce', 'avantgo', 'mazingo', 'mobile', 'iphone', 't68', 'syncalot', 'blazer');
foreach($search as $sk => $sv) {
if(preg_match('/\b'.$sv.'\b/i', $ua)) {
header("Location: http://m.example.com");
exit;
}
}
答案 0 :(得分:2)
您可能希望首先尝试回显Attempting to Redirect
来代替标题,这样您就可以看到它是否正在尝试重定向某人。这样你就可以检查函数的前半部分是否有效。
这是一个blog post,它与你正在做的非常类似,它使用strpos而不是preg_match,这可能更直接。
如果不是'重定向',AKA,header
功能似乎不起作用,则还有其他问题。
如果header
功能不起作用,请尝试将Firefox添加到要重定向的浏览器列表中,然后使用Firebug检查发送到浏览器的标头。
可能是PHP和Apache如何交互的问题。
有可能您关闭了error_reporting。如果这样做,PHP可能会尝试输出一个错误,指出在header命令之前发送了空格。
在header()
命令之前,尝试设置error_reporting(E_ALL);
,并检查是否提供了错误消息
Headers could not be sent. Headers have already been sent on file.php line 1.
基本上,如果您在header()
命令之前发送任何HTML,空格或几乎任何类型的输出,PHP将会出错,因为必须在页面内容之前发送标题。发送第一个空格后,将发送标题,您无法再发送
您可以使用header_sent()
if(headers_sent()){ echo "Headers Sent"; }
答案 1 :(得分:0)
在进行标头调用之前,请确保尚未将响应提交到当前页面。如果已经将任何文本写入输出流...文本,空格等
,则会发生这种情况