2011-12-30 3 views
0

私は奇妙な問題があります。それはほとんどバグのようです。私は$のURLの値をエコー場合PHPヘッダがクエリ文字列を保持しない

if ($object->error) {Form::BuildReturn(); header ("location:$url");}

は今、私は正しい値を取得:/projects/view/112/?edit-note=105

をしかし、スクリプトが実行されたとき、それは/projects/view/112/に私を取ります。

ここでも奇妙な部分があります。ヘッダーの直後に何かをエコーし​​たり印刷したりして、それから私が望むように/projects/view/112/?edit-note=105に連れて行くことができます。例:

if ($object->error) {Form::BuildReturn(); header ("location:$url"); echo 0;}

私は上の約半分の時間が今、「PHPヘッダが値を取得」「PHPのヘッダクエリ文字列」のような用語を使用してこれを検索しようとした、としました。私は実際の解決策ではなく、「ヘッダー情報を変更できません」警告を生成するハックのある回避策を使用することを望みます。

+0

'header(" Location:... ")'は受け付けません。 $ urの代わりにPHPで "/ projects/view ..."を直接書くとうまくいくのですか?エコーで動作する場合は、リダイレクトの後に 'exit;'を追加してみてください。 – Dion

+0

Doh ...働いていた 'exit;' ...とは考えていませんでした。ありがとうございました。あなたが回答としてそれを投稿するなら、私はそれを受け入れるでしょう。 – tuespetre

+1

プロトコルとサーバー名 'http://example.com/.. 'を含む絶対URLを試してください。' wget -S'またはFirebugヘッダーダンプも表示してください。また、あなたのコードに複数のheader()呼び出しがあり、より特定のものを上書きする可能性があります。 – mario

答えて

2

リダイレクト後にexit;を追加してみてください。これにより、現在のファイルの実行が停止します。

2

リダイレクトするためのヘッダの後

exit(0); 

を加えます。

コードはヘッダー呼び出しの後でも実行され続けるためです。リダイレクトのためにスクリプトを明示的に終了する必要があります。詳細はhereです。

1

正しい構文は次のとおりです。そこのスペースと資本Lがあります

header("Location: $url"); 

、私はそれが大きな違いを作るだろうかわかりません。

当面は低レベルのデバッグをお勧めします。 wgetcurlを使用してください。ブラウザのデベロッパーモードまたはすべてのHTTPヘッダーをエコーし​​て、サーバーヘッダーに返されているものを正確にポストするプラグインです(結果があなたには分かりません)。

1

Locationヘッダーを渡した後は、残りのページが表示されないように、常にexitにする必要があります。また、あなたの問題を解決するはずです。


また、Locationヘッダの正しい形式は次のようになります。

header("Location: $url"); //Has space and capital L 

私はそれはおそらく唯一の古いブラウザのために、本当に問題だと思いませんか?

0

メタタグでリダイレクト機能を使用できます。それはクエリ文字列を保持します

function redir($url, $time = 0) { 
    echo '<meta http-equiv="refresh" content="', $time, ';URL=', $url, '">'; 
    die; 
} 
+1

しかし、それは常に時間がかかるし、クライアント側です。 – Dion

関連する問題