试图用PHP重定向到外部网站

时间:2010-01-18 17:28:49

标签: php redirect

我正在尝试重定向移动用户并尝试以下操作,但它实际上并没有重定向...

$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;
    }

}

2 个答案:

答案 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)

在进行标头调用之前,请确保尚未将响应提交到当前页面。如果已经将任何文本写入输出流...文本,空格等

,则会发生这种情况