redirect 関数 - PHPでリダイレクトを作成するには?




14 Answers

function Redirect($url, $permanent = false)
{
    if (headers_sent() === false)
    {
        header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
    }

    exit();
}

Redirect('http://www.google.com/', false);

死ぬことを忘れないでください()/ exit()!

301 処理後 https

PHPを使用してユーザーを別のページにリダイレクトすることは可能ですか?

ユーザーがwww.example.com/page.phpwww.example.com/page.php / www.example.com/page.phpにリダイレクトしたいとしたら、メタリフレッシュを使用せずにどうすればよいですか? 可能?

これにより、権限のないユーザーからページを保護することさえできます。




header()関数を使用してHTTP Locationヘッダを送信する

header('Location: '.$newURL);

これとは逆に、 die()はリダイレクションとは何の関係もありません。 通常の実行の代わりにリダイレクトする場合にのみ使用してください。

example.php:

<?php 
header('Location: static.html');
$fh = fopen('/tmp/track.txt','a');
fwrite($fh, $_SERVER['REMOTE_ADDR'].' '.date('c')."\n");
fclose($fh);
?>

結果または3回の実行:

bart@hal9k:~> cat /tmp/track.txt
127.0.0.1 2009-04-21T09:50:02+02:00
127.0.0.1 2009-04-21T09:50:05+02:00
127.0.0.1 2009-04-21T09:50:08+02:00

Resuming - obligatory die() / exit()は実際のPHPとは何の関係もない都市の伝説です。 クライアントはLocation:ヘッダーを "尊重"することとは関係ありません。 ヘッダを送信しても、使用するクライアントにかかわらず、PHPの実行は停止しません。




これらの答えのほとんどは非常に重要なステップを忘れています!

header("Location: myOtherPage.php");
die();

その重要なセカンドラインを外に出すと、あなたはthedailywtf.com/Articles/WellIntentioned-Destruction.aspx終わるかもしれない。 問題は、ブラウザがあなたのページが返すヘッダを尊重する必要がないことです。したがって、ヘッダが無視されると、ページの残りの部分はリダイレクトなしで実行されます。




これらの回答の多くは正しいものですが、絶対URLがないと思われます。 相対URLを使用して残りの部分を生成する場合は、次のようなことができます。

$url = 'http://' . $_SERVER['HTTP_HOST'];            // Get the server
$url .= rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); // Get the current directory
$url .= '/your-relative/path-goes/here/';            // <-- Your relative path
header('Location: ' . $url, true, 302);              // Use either 301 or 302



私はすでにこの質問に答えてきましたが、一方で、CLIで実行している場合(リダイレクトは実行できず、 exit()ないでexit() )、またはあなたのWebサーバはPHPを(F)CGIとして実行しています(正しくリダイレ​​クトするには、以前に設定したStatusヘッダが必要です)。

function Redirect($url, $code = 302)
{
    if (strncmp('cli', PHP_SAPI, 3) !== 0)
    {
        if (headers_sent() !== true)
        {
            if (strlen(session_id()) > 0) // if using sessions
            {
                session_regenerate_id(true); // avoids session fixation attacks
                session_write_close(); // avoids having sessions lock other requests
            }

            if (strncmp('cgi', PHP_SAPI, 3) === 0)
            {
                header(sprintf('Status: %03u', $code), true, $code);
            }

            header('Location: ' . $url, true, (preg_match('~^30[1237]$~', $code) > 0) ? $code : 302);
        }

        exit();
    }
}

私は以前の回答のコメントに記載されているように、さまざまなHTTPリダイレクトコード( 301および307 )をサポートするという問題も扱ってきました。

  • 301 - 永久に移動しました
  • 302 - 見つかりました
  • 303 - その他を見る
  • 307 - 一時リダイレクト(HTTP / 1.1)



header("Location: /index.php");
exit(0);   



<?php 
header('Location: redirectpage.php');
header('Location: redirectpage.php');exit();
echo "<script>location.href='redirectpage.php';</script>";
?>

これは通常のPHPリダイレクトですが、コードの下に数秒待ってページをリダイレクトすることができます:

<?php
header('refresh:5;url=redirectpage.php '); //Note: here 5 means 5 seconds wait for redirect.
?>



他の人が言ったように、ロケーションヘッダーを送る:

header( "Location: http://www.mywebsite.com/otherpage.php" );

他の出力をブラウザに送る前にそれを行う必要があります。

また、これを使用して特定のページから認証されていないユーザーをブロックする場合は、前述のように、一部のユーザーエージェントthedailywtf.com/Articles/WellIntentioned-Destruction.aspxして現在のページで続行することに注意してください。 )あなたがそれを送った後。




おそらくこれに答えるには遅すぎるでしょう。 それにもかかわらず、ここに私の考えがあります:

IMHOでは、着信リクエストをリダイレクトする最善の方法は、ロケーションヘッダーを使用することです

<?php
header("Location: /index.php");
?>

この文が実行され、出力が送信されると、ブラウザはユーザのリダイレクトを開始します。 ただし、ヘッダーを送信する前に出力(エコー/ var_dump)がないことを確認してください。そうしないと、エラーが発生します。

これは最初に尋ねられたものを達成するための迅速かつ汚れた方法ですが、この種のリダイレクトは常に301/302リダイレクトとして解釈されるため、最終的にはSEOの惨事になります。リンク先ページ/メインページではなく、常にリダイレクトページとしてインデックスページを表示します。 したがって、ウェブサイトのSEO設定に影響します。




ビジターを別のページにリダイレクトするには(特に条件付きループで便利です)、次のコードを使用してください:

<?php 
header('Location: mypage.php'); 
?>

この場合、 mypage.phpは訪問者をリダイレクトするページのアドレスです。 このアドレスは絶対値でもかまいません。また、次の形式のパラメータを含めることもできますmypage.php?param1=val1¶m2=val2)

相対/絶対パス

相対パスまたは絶対パスを扱う場合は、サーバーのルート(DOCUMENT_ROOT)から絶対パスを選択することが理想的です。 次の形式を使用します。

<?php 
header('Location: /directory/mypage.php'); 
?>

ターゲットページが別のサーバーにある場合は、完全なURLを含めます。

<?php 
header('Location: http://www.ccm.net/forum/'); 
?> 

HTTPヘッダー

HTTPプロトコルによれば、HTTPヘッダはあらゆるタイプのコンテンツのbeforeに送信されなければならない。 つまり、ヘッダーの前に文字を送信する必要はありません。

一時的/恒久的なリダイレクト

既定では、上記のリダイレクトの種類は一時的なものです。 つまり、Googleなどの検索エンジンは、インデックス登録時にリダイレクトを考慮しません。

ページが別の場所に永続的に移動されたことを検索エンジンに通知するには、次のコードを使用します。

<? 
header('Status: 301 Moved Permanently', false, 301); 
header('Location: new_address'); 
?>

たとえば、このページには次のコードがあります。

<? 
header('Status: 301 Moved Permanently', false, 301); 
header('Location: /pc/imprimante.php3'); 
exit(); 
?>

上記のリンクをクリックすると、自動的にこのページにリダイレクトされます。 さらに、これは永続的なリダイレクト(Status:301 Moved Permanently)です。 したがって、Googleに最初のURLを入力すると、自動的に2番目のリダイレクトされたリンクにリダイレクトされます。

PHPコードの解釈

header()の後にあるPHPコードは、訪問者がリダイレクトで指定されたアドレスに移動しても、サーバによって解釈されます。 ほとんどの場合、これは、サーバーの負荷を減らすために、 exit()関数のheader()関数に従うメソッドが必要であることを意味します。

<? 
header('Status: 301 Moved Permanently', false, 301); 
header('Location: address'); 
exit(); 
?>



我々は2つの方法で行うことができます

  1. ユーザーがhttps://bskud.com/PINCODE/BIHAR/index.php来ると、 https://bskud.com/PINCODE/BIHAR/index.phpにリダイレクトされhttps://bskud.com/PINCODE/BIHAR.php

下のPHPコード

<?php header("Location: https://bskud.com/PINCODE/BIHAR.php"); exit; ?>

上記のコードをhttps://bskud.com/PINCODE/BIHAR/index.php保存してhttps://bskud.com/PINCODE/BIHAR/index.php

2.条件が真であれば、他のページにリダイレクトする

<?php  $myVar = "bskud";   if ($myVar == "bskud") { ?>  <script> window.location.href="https://bskud.com";  </script> <?php  } else {  echo "<b>Check Website Name Again</b>"; } ?>

`




あなたは、リダイレクトを行うためにPHPのヘッダー関数を使用しようとすることができます。 あなたのブラウザが画面にリダイレクト警告を投げないように出力バッファを設定したいと思うでしょう。

ob_start();
header("Location: ".$website);
ob_end_flush();



<?php
$url = "targetpage"
Function redirect$url(){
   If (headers_sent()) == false{
      Echo '<script>window.location.href="' . $url . '";</script>';
}}
?>



1.ヘッダーインビルドPHP関数を使用する

a)パラメータなしの単純なリダイレクト

<?php

   header('Location: index.php');

?>

b)GETパラメータでリダイレクトする

<?php

      $id = 2;

      header("Location: index.php?id=$id&msg=succesfully redirect");

  ?>

2. PHPでjavascriptでリダイレクトする

a)パラメータなしの単純なリダイレクト

<?php 

     echo "<script>location.href='index.php';</script>";

 ?>

b)GETパラメータでリダイレクトする

<?php 

     $id = 2;

     echo "<script>location.href='index.php?id=$id&msg=succesfully redirect';</script>";

   ?>



Related


Tags

php   redirect