2015-12-09 48 views
-1

我想使用php將非www url重定向到www。使用php header()函數重定向非www到www

我知道它可以很容易地通過在htaccess中使用mod_rewrite來實現。但我想用php header()來做這個重定向。

我寫了一個腳本,檢查主機是否帶有www。

$url=$_SERVER["HTTP_REFERER"]; 
if(preg_match_all("/http:\/\/www\./i",$url,$m)) 
{echo "host has www";} 

其他 {回聲「主持人不以www開始」;}

我怎麼能繼續與它添加頁眉與301種狀態,如果一部開拓創新重定向到www.domain.com主機是不是www?

這種重定向可能在PHP?

回答

4

你可以不喜歡它:

if (strpos($_SERVER['HTTP_HOST'], 'www') === false) { 
    $protocol = isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN) 
     ? 'https' 
     : 'http'; 
    header(
     "Location: $protocol://www." . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 
     true, 
     301 
    ); 
} 
+1

感謝您的答案matei,它工作正常。 – starkeen

+0

這是302重定向? – starkeen

+1

您可以將任何'http_response_code'作爲標題功能的第三個參數 –

2

header('Location: http://www.YOURDOMAIN.com/foo/bar?foo=bar', true, 301);

檢查出來here

+0

謝謝,我將如何添加perameters到目標URL? – starkeen

+0

你是什麼意思?路徑'../ foo/bar'或者一些querystring'?foo = bar'只是將它附加到url。 – nipeco

+1

我有一個工作答案,也謝謝你的幫助。 – starkeen

2

您檢查REFERER不是主機名。

$protocol = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://"; 

if (substr($_SERVER['HTTP_HOST'], 0, 4) !== 'www.') { 
    header('Location: ' . $protocol.'www.' . $_SERVER['HTTP_HOST'] . '/' . $_SERVER['REQUEST_URI'], true, 301); 
    exit; 
} 

就是這樣。

+0

好的答案,還要考慮可以在標題命令的第三個參數中設置的301和302重定向之間的區別。 –

+0

未定義索引「https」 – starkeen

+0

未對每個請求設置HTTPS,因此我更新了代碼。 – Stony