web-dev-qa-db-ja.com

リダイレクトのためのwindow.location(JS)vs header()(PHP)

JSを使用:(in <head>タグ)

<script>window.location="https://stackoverflow.com";</script>

sing PHP:(in <head>タグ)

header('Location: https://stackoverflow.com');
end();

どれを使うべきですか?または別の?

および使用方法について<meta>

<meta http-equiv="refresh" content="0;url=https://stackoverflow.com"/> 

多くの良い答え、どの答えを受け入れるかわからない、どうもありがとう

14
l2aelba

結果はすべてのオプションで同じです。リダイレクト。

HTMLの_<meta>_:

  • サイトのコンテンツを表示し、数秒(または0秒)後にユーザーをリダイレクトします。
  • JavaScriptを有効にする必要はありません。
  • PHPは必要ありません。

_window.location_ JSの場合:

  • Javascriptが有効になっている必要があります。
  • PHPは必要ありません。
  • サイトのコンテンツを表示し、数秒(または0秒)後にユーザーをリダイレクトします。
  • リダイレクトは、任意の条件if (1 === 1) { window.location.href = 'http://example.com'; }に依存できます。

header('Location:') PHPの場合:

  • JavaScriptを有効にする必要はありません。
  • PHPが必要です。
  • リダイレクトが最初に実行され、ユーザーは後を見ることができません。 header()は、他の出力を行う前に、phpスクリプトの最初のコマンドでなければなりません。ヘッダーの前に出力しようとすると、_Warning: Cannot modify header information - headers already sent_を受け取ります
21
Damonsson

JSで場所を設定するより良い方法は次のとおりです。

window.location.href = 'https://stackoverflow.com';

PHPまたはJSを使用してリダイレクトを管理するかどうかは、コードの実行内容と方法によって異なります。しかし、PHPを使用する立場にある場合、つまり、 PHPを使用して、ブラウザに別の場所に移動するよう指示するJSコードを送信します。ロジックは、仲介者を切り取ってPHP経由で直接ブラウザに指示することを提案します。

11
Wintermute

ユーザーを別のページにリダイレクトする方法とタイミングによって異なります。

瞬時にリダイレクト間にサイトの何かを見ないでユーザーを別のページに移動する場合は、PHP header]リダイレクトメソッドを使用する必要があります。 。

Javascriptがあり、ユーザーの何らかのアクションで別のページに入る必要がある場合は、window.location

metaタグの更新は、これらの「ダウンロードを自動的に開始する必要があります」というメッセージが表示されるたびに、ダウンロードサイトでよく使用されます。ユーザーにページをロードさせることができます一定時間待ってからリダイレクト彼(たとえば、ダウンロードされるファイルに)Javascriptなし。

8
Butt4cak3

PHPリダイレクトは、JavaScriptの場合と同じようにリダイレクトの前にクライアントにページをロードさせ、PHPの場合は適切なヘッダーを送信します。

ただし、PHPは<head>に入れないでください。出力がクライアントに送信される前に行く必要があります。そうしないとエラーが発生します。

<meta>タグを使用すると、リダイレクトを実行する前に初期ページが読み込まれるというJavascriptと同じ問題があります。サーバー側のリダイレクトは、使用できる場合、ほぼ常に優れています。

3
krisnoble

JSがオフの場合、最初のケースは失敗します。また、JSを最初に解析する必要があるため(DOMをロードする必要があるため)、少し遅くなります。ただし、宛先はリファラーを知らず、リダイレクトが追跡される可能性があるため、JSの方が安全です(リファラーは一般的に信頼できませんが、これは何かです) 。

meta refresh タグを使用することもできます。また、DOMをロードする必要があります。

2
oleq