2010-01-18 91 views
0

我試圖移動用戶重定向和我嘗試以下,但它實際上並沒有重定向在所有...試圖重定向到外部網站使用PHP

$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

你可能想先試試只是迴應Attempting to Redirect代替標題,所以你可以看看它是否試圖重定向某人。這樣你可以檢查函數的前半部分是否工作。

這是一個blog post關於你正在做的事情非常相似,它使用strpos而不是preg_match,這可能更直接。

如果它不是'重定向',AKA,header函數看起來沒有工作,您還有其他一些問題。


如果header功能無法正常工作,嘗試加入火狐瀏覽器列表重定向,然後用Firebug檢查頭被髮送到瀏覽器。

這可能是PHP和Apache如何交互的問題。

您有可能關閉了error_reporting。如果這樣做,PHP可能會嘗試輸出一個錯誤,指出在您的標頭命令之前發送了空白。

header()命令之前,嘗試設置error_reporting(E_ALL);,並檢查它是否給出了一個錯誤消息的

Headers could not be sent. Headers have already been sent on file.php line 1. 

的果基本上,如果你發送任何HTML,空白,或幾乎任何類型的輸出的前header()命令,PHP會出錯,因爲標題必須在頁面內容之前發送。第一空白髮送後,頭被髮送,您不能發送了

您可以檢查頭使用header_sent()

if(headers_sent()){ echo "Headers Sent"; } 
+0

我確實這樣做了,而且我收到'重定向'消息,所以我知道它正在嘗試。 .. – phpN00b 2010-01-18 17:33:16

0

確保響應尚未致力於發送在進行該標題調用之前的當前頁面。如果有任何文本已經寫入輸出流......文本,空格等,則會發生這種情況。