2011-08-01 24 views
1

私は別の名前の新しいページに置き換えられたページを持っていますが、URLに渡された_GET変数を維持しながらこのページをリダイレクトする方法はありますか?私が今持っているものPHP:301 GET変数を保持しているページをリダイレクト

old-page.php

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

ユーザーはそれらがnew-page.phpに取られold-page.php?var=1のようなURLに移動したときに、どのように私はそれがnew-page.php?var=1にそれらをリダイレクトするために得ることができますか?クエリ文字列はいくつかの異なるものになる可能性がありますので、get変数の任意の組み合わせで動作するソリューションをご希望です。

答えて

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

関連する問題