1

私がコーディングしてきたphpベースのアプリケーションでは、次の小さなコードブロックがあります。

if (isset($_SERVER['QUERY_STRING'])) {
    header("Location: " . $_SERVER['QUERY_STRING']);
}

私のアプリケーションでは、フレームセットとフレームを使用しています。このコードはメインコンテンツエリアフレームに存在し、IEで実行すると、手動で読み込みを停止しない限りブラウザを強制終了する無限ループを作成します。

このコードの目的は、URLにクエリ文字列が追加されているかどうかを検出し、追加されている場合はそのクエリ文字列にリダイレクトすることです。私は主にchromeとfirefoxを使用して開発してきましたが、今日はIE9でテストすることにしました。以前のバージョンではテストしていませんが、これまでのところ、この動作はIEでのみ発生し、なぜこのようなことが発生するのかについて率直に言って困惑しています。私はこことインターネットで同様の質問を検索しましたが、これまでのところサイコロはありません。

編集

以前の編集で述べたように、私はフレームセットとフレームを使用してインターフェイスを制御しています。左側のフレームであるサイドバーには、メインの「コンテンツ」エリアフレームのベースターゲットとのリンクが含まれています。コンテンツ領域フレームのコンテンツには、親ウィンドウのURLにクエリ文字列を追加するjavascriptが含まれているため、インデックスページにアクセスすると(クエリ文字列が存在する場合)、コンテンツフレームがその特定のページにリダイレクトされます。

これはChromeでは完全に正常に機能します。IE(またはこの編集の時点で私が発見したFirefox)ではありません。つまり、代わりに、フレームセットを含むページであるインデックスページにリダイレクトし、これを永久に実行して、サイドバーの後にサイドバーを作成します。

4

3 に答える 3

0

次のことを試してください。

session_start();

if ( !isset($_SESSION['Redirect'] ) && isset( $_SERVER['QUERY_STRING'] ) ) {
    $_SESSION['Redirect'] = true;
    header( "Location: " . $_SERVER['QUERY_STRING'] );
}
于 2012-08-01T02:33:44.317 に答える
0

これが問題になるかどうかはわかりませんが、HTTP / 1.1に従って、リダイレクトにはホスト名を含む完全な絶対パスが必要です。だからおそらくこれを試してみてください:

<?php
/* Redirect to a different page in the current directory that was requested */
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = $_SERVER['QUERY_STRING'];
header("Location: http://$host$uri/$extra");
exit;
?>

または、別の提案は、完全なクエリ文字列(のような?thispage.php)の使用を避け、代わりにGETパラメータ(のような?path=thispage.php)を使用することです。

<?php
/* Redirect to a different page in the current directory that was requested */
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = $_GET['page'];
header("Location: http://$host$uri/$extra");
exit;
?>
于 2012-08-01T02:55:36.677 に答える
0

それがどれほどひどく単純であるかを考えると、私はこれをすぐに考えないことを嫌います。私がしたのは、$_SERVER['QUERY_STRING']空かどうかを確認することだけでした。

if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != '') {
    header("Location: " . $_SERVER['QUERY_STRING']);
}

そして、それはインデックスページが無限にネストされたフレームセットとフレームを作成するという問題を解決しました。

于 2012-08-01T02:57:51.180 に答える