2011-08-01 54 views
1

我有一個頁面已被一個不同名稱的新頁面替換,有沒有一種方法來重定向此頁面,同時保持URL中傳遞的_GET變量。PHP:301重定向頁面,同時保持GET變量

我現在所擁有的:

old-page.php

header('Location: http://www.example.com/new-page.php', true, '301'); 

當用戶瀏覽到像old-page.php?var=1一個網址就被帶到new-page.php,我怎樣才能得到它重定向到new-page.php?var=1?查詢字符串可以是幾個不同的東西,所以我想要一個解決方案,可以工作與任何組合的變量。

回答

4
header('Location: http://www.example.com/new-page.php' 
    .(!empty($_SERVER['QUERY_STRING'])?'?'.$_SERVER['QUERY_STRING']:''), 
    true, '301'); 
0

您可以使用會話:

session_start(); 
$_SESSION['your var'] = "value"; 

,或者你可以通過它在你的重定向URL

header('Location: http://www.example.com/new-page.php?key=value', true, '301'); 
0

如果您使用的是Apache,你可以使用萬能mod_rewrite。這樣,您可以重寫所有內容 - GETPOST等等。

如果你想在PHP中做到這一點,爲了使它正確(tm),你需要考慮$_SERVER['HTTPS'],$_SERVER['HTTP_HOST']$_SERVER['SERVER_PORT']以及。只是因爲在自定義端口上運行HTTPS時,您可能不想使用默認端口重定向到HTTP。

0

你可以這樣做:

$parse = ''; 

foreach($_GET as $i => $j) 
    $parse .= "$i=$j&"; 

$parse = (strlen($parse) > 0 ? "?" : "") . substr($parse, 0, -1); 

header("Location: old-page.php$parse"); 
+1

這個工作在現實世界中,但它仍然違反了規範,爲給定的資源是無效的 - 它缺少的方案和主機。 – Shi

+0

我對PHP並不擅長,所以如果你可以給我一個資源來解釋你剛纔所說的話會很感激。 – Marty

+1

這不是一個PHP問題,但與HTTP有關,請參閱[RFC 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30)。 – Shi