1440

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

ユーザーが にwww.example.com/page.phpアクセスして にリダイレクトしたいとしwww.example.com/index.phpます。メタ リフレッシュを使用せずにどのようにリダイレクトしますか? 出来ますか?

これにより、許可されていないユーザーからページを保護することさえできます.

4

33 に答える 33

143

header()関数を使用してHTTPLocationヘッダーを送信します。

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

再開 — 必須die()/exit()実際の PHP とは何の関係もない都市伝説です。Location:クライアントがヘッダーを「尊重」することとは関係ありません。使用しているクライアントに関係なく、ヘッダーを送信しても PHP の実行は停止しません。

于 2009-04-20T14:14:11.130 に答える
123
function Redirect($url, $permanent = false)
{
    if (headers_sent() === false)
    {
        header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
    }

    exit();
}

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

die()/を忘れないでくださいexit()

于 2009-04-20T14:19:11.010 に答える
108

echo を使用して PHP から JavaScript を出力します。

echo '<script type="text/javascript">
           window.location = "http://www.google.com/"
      </script>';

ページ出力をバッファリングし、後でリダイレクト条件を確認しない限り、PHP で実際に行うことはできません。それは面倒すぎるかもしれません。ページから最初に送信されるのはヘッダーであることに注意してください。通常、リダイレクトのほとんどは、ページの後半で必要になります。そのためには、ページのすべての出力をバッファリングし、後でリダイレクト条件を確認する必要があります。その時点で、ページの user header() をリダイレクトするか、バッファリングされた出力を単純にエコーすることができます。

バッファリングの詳細 (利点)

出力バッファリングとは何ですか?

于 2014-06-27T07:24:59.483 に答える
34

使用する:

<?php header('Location: another-php-file.php'); exit(); ?>

または、すでに PHP タグを開いている場合は、次を使用します。

header('Location: another-php-file.php'); exit();

次のような外部ページにリダイレクトすることもできます。

header('Location: https://www.google.com'); exit();

を必ず含めるexit()か、含めてくださいdie()

于 2016-05-16T13:12:55.453 に答える
18

次のコードを使用します。

header("Location: /index.php");
exit(0);   
于 2015-01-12T11:03:32.137 に答える
17

header( 'Location: http://www.yoursite.com/new_page.html' );

于 2009-04-20T14:14:41.643 に答える
14

私はすでにこの質問に答えていますが、CLI で実行している場合 (リダイレクトは発生しないため、発生しないはず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 リダイレクト コード ( 301302303および) をサポートする問題も処理しました。307説明は次のとおりです。

  • 301 - 恒久的に移動
  • 302 - 見つかった
  • 303 - その他を見る
  • 307 - 一時リダイレクト (HTTP/1.1)
于 2011-04-28T21:31:36.370 に答える
7

セマンティック Web の前夜には、正確性を考慮する必要があります。残念ながら、PHP の "Location" ヘッダーはまだHTTP 302リダイレクト コードを使用していますが、これは厳密にはリダイレクトに最適なものではありません。代わりに使用する必要があるのは303です。

W3C は親切にも、303 ヘッダーは「HTTP/1.1 より前の多くのユーザー エージェント」と互換性がなく、現在使用されているブラウザーは存在しないと述べていますつまり、302 は遺物であり、使用すべきではありません

...または、他のみんなと同じように、無視することもできます...

于 2009-04-20T20:25:12.033 に答える
2

これを行うには複数の方法がありますが、必要に応じphpて関数の使用をお勧めしheader()ます。

基本的

$your_target_url = “www.example.com/index.php”;
header(“Location : $your_target_url”);
exit();

ワンランク上のものにしたい場合は、関数で使用するのが最善です。そうすれば、認証やその他のチェック要素を追加できます。

ユーザーのレベルを確認しながら試してみましょう。

したがって、ユーザーの権限レベルを というセッションに保存したとしますu_auth

の中にfunction.php

<?php
    function authRedirect($get_auth_level,
                          $required_level,
                          $if_fail_link = “www.example.com/index.php”){
        if ($get_auth_level != $required_level){
            header(location : $if_fail_link);
            return false;
            exit();
        }
        else{
            return true;
        }
     }

     . . .

次に、認証するすべてのページに対して関数を呼び出します。

page.phpまたは他のページのように。

<?php

    // page.php

    require “function.php”

    // Redirects to www.example.com/index.php if the
    // user isn’t authentication level 5
    authRedirect($_SESSION[‘u_auth’], 5);

    // Redirects to www.example.com/index.php if the
    // user isn’t authentication level 4
    authRedirect($_SESSION[‘u_auth’], 4);

    // Redirects to www.someotherplace.com/somepage.php if the
    // user isn’t authentication level 2
    authRedirect($_SESSION[‘u_auth’], 2, “www.someotherplace.com/somepage.php”);

    . . .

参考文献;

于 2018-01-28T22:17:07.200 に答える
2
header("Location: https://www.example.com/redirect.php");

このリンクへの直接リダイレクトhttps://www.example.com/redirect.php

$redirect = "https://www.example.com/redirect.php";
header("Location: $redirect");

最初に$redirect値を取得し、次に [value] にリダイレクトします: https://www.example.com/redirect.php

于 2022-01-03T16:34:17.957 に答える
2

秒数を数えた後のリダイレクトのようなものが好きです

<?php

header("Refresh: 3;url=https://theweek.com.br/índex.php");
于 2020-01-13T05:21:08.670 に答える