PHP を使用してユーザーを別のページにリダイレクトすることは可能ですか?
ユーザーが にアクセスしwww.example.com/page.php
、 にリダイレクトしたい場合www.example.com/index.php
、メタリフレッシュを使用せずにリダイレクトするにはどうすればよいでしょうか? 可能ですか?
これにより、権限のないユーザーからページを保護することもできます。
ベストアンサー1
既存の回答の要約と私自身の意見:
1. 基本的な回答
この関数を使用して新しい HTTP ヘッダーを送信できますが、これは HTML またはテキストの前 (つまり、宣言の前など)header()
にブラウザーに送信する必要があります。<!DOCTYPE ...>
header('Location: '.$newURL);
2. 重要な詳細
die()またはexit()
header("Location: https://example.com/myOtherPage.php");
die();
die()
または を使用する理由exit()
:デイリーWTF
絶対 URL または相対 URL
2014年6月以降、絶対URLと相対URLの両方が使用可能になりました。RFC7231 の翻訳古いものに取って代わったRFC 2616絶対 URL のみが許可されていました。
ステータスコード
PHPの「Location」ヘッダーは依然としてHTTP 302-リダイレクトコード、これは「一時的な」リダイレクトであり、使用すべきものではない可能性があります。301(永久リダイレクト)または303(他の)。
注記:W3Cの言及303 ヘッダーは、多くの HTTP/1.1 以前のユーザー エージェントと互換性がありません。現在使用されているブラウザーはすべて HTTP/1.1 ユーザー エージェントです。これは、スパイダーやロボットなどの他の多くのユーザー エージェントには当てはまりません。
3. ドキュメント
HTTP ヘッダーとheader()
PHP の関数
4. 代替案
代替方法を使用することもできますhttp_redirect($url);
。PECL パッケージ peclインストールされます。
5. ヘルパー関数
この関数には 303 ステータス コードは組み込まれていません。
function Redirect($url, $permanent = false)
{
header('Location: ' . $url, true, $permanent ? 301 : 302);
exit();
}
Redirect('https://example.com/', false);
これはより柔軟です:
function redirect($url, $statusCode = 303)
{
header('Location: ' . $url, true, $statusCode);
die();
}
6. 回避策
前述のように、header()
リダイレクトは何かが書き込まれる前にのみ機能します。通常、次の場合は失敗します。HTML内で呼び出される出力。次に、次のような HTML ヘッダーの回避策を使用します (あまりプロフェッショナルではありません)。
<meta http-equiv="refresh" content="0;url=finalpage.html">
あるいは JavaScript リダイレクトもあります。
window.location.replace("https://example.com/");