PHPでリダイレクトするにはどうすればよいですか?


1262

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

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

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


PHPでヘッダーを更新できます:ヘッダー
Zack Marrapese 2009

11
@Sam:サイドノードと同じようにprotection from unauthorized users、リダイレクトを介していかなる種類実装しないください。これは、物事を行う方法ではありません;)
Strae

7
@Straeリダイレクトでページを保護することの何が問題になっていますか?では、最善の方法は何ですか?

6
@PravindaAmarathungaリダイレクトは要素の1つですが、それだけではありません。保護された要素が権限のないユーザーに対してまったく出力されないことを確認してください。ブラウザのリダイレクトはクライアント側で無効にできます。たとえば、ブラウザがリダイレクトを行わず、元のページが通常どおりに出力された場合、ユーザーには何が表示されますか?CMSは通常リダイレクト行い、保護されたアイテムを印刷せず、通常の出力を礼儀メッセージに置き換えます。
Strae 2013

@PravindaAmarathungaは、マーカスの回答からのリンクを確認してください:thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Strae

回答:


1698

既存の回答の要約と自分の2セント:

1.基本的な答え

このheader()関数を使用して新しいHTTPヘッダーを送信できますが、これはHTMLまたはテキストの前に(<!DOCTYPE ...>たとえば、宣言の前に)ブラウザーに送信する必要があります。

header('Location: '.$newURL);

2.重要な詳細

die()またはexit()

header("Location: http://example.com/myOtherPage.php");
die();

なぜ使用する必要があるのdie()exit()The Daily WTF

絶対または相対URL

2014年6月以降、絶対URLと相対URLの両方を使用できます。絶対URLのみが許可されていた古いRFC 2616を置き換えたRFC 7231を参照してください。

ステータスコード

PHPの「Location」ヘッダーは引き続きHTTP 302リダイレクトコードを使用しますが、これは使用すべきコードではありません。301(永続的なリダイレクト)または303(その他)のいずれかを検討する必要があります。

注:W3Cによると、303ヘッダーは「多くのHTTP / 1.1より前のユーザーエージェントと互換性がありません。現在使用されているブラウザーはすべてHTTP / 1.1ユーザーエージェントです。これは、スパイダーやロボットなどの他の多くのユーザーエージェントには当てはまりません。

3.ドキュメント

HTTPヘッダーとheader()PHP の関数

4.代替案

PECLパッケージpeclをインストールhttp_redirect($url);する必要がある別の方法を使用できます。

5.ヘルパー関数

この関数には、303ステータスコードは組み込まれていません。

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

    exit();
}

Redirect('http://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("http://example.com/");

5
この回答に関するいくつかの問題:303は「正しい」ステータスコードではない可能性があります。たとえば、Googleでは301が望ましい場合があります。次に、header('Location: '.$newURL);HTML(またはテキスト)がブラウザに渡される前でなければなりません。そうでない場合、正しく動作しません。
チャックルバット、

6
悲しいことに、毎日のWTFストーリーは一般的なものです。とにかく、問題の原因は欠けているダイではなく、悪いデザインです。プロセスを激しくシャットダウンすることは、99.9%のケースで間違っています。一般的な、よりクリーンなソリューション(とにかく私のお気に入りではありません)は、RedirectionExceptionをスローして、アプリケーションのエントリポイントでキャッチすることです。その後、すべての「アフター*」コール(ログ/接続を閉じる/何でも)を行うことができます
robertodecurnex 14/07/17

4
http-equiv="Location"すべてのブラウザでサポートされていません。refresh代わりに使用する必要があります!<meta http-equiv="refresh" content="0;url=http://example.com/">
Timo002 '09 / 09/23

71
決してあなたがない限り、301を発行しないことを意味します。301はパーマネント、パーマネントはパーマネントを意味します。つまり、ユーザーエージェントによってキャッシュされることを意味します。つまり、ページが呼び出されたり更新されたりして、誓うために、あなたが気が狂っているかどうか疑問に思っている、アプリケーションログを見つめる長いカフェインでいっぱいの夜です。神にとってそれはあなたのマシンでは機能しますが、クライアントでは機能しません。どうしても301を呼び出す必要がある場合は、リソースにcache-control max-ageを設定します。あなたには無限の知恵はありませんし、あなたがするように振る舞うべきではありません。
madumlao 14

2
しかし、出口でダイを使用する理由はありますか?出口はよりクリーンで適切なようです。
ars265 2015年

122

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

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


8
ヘッダ:ダイ()またはexit()は、「...場所」を尊重していないクライアントのためにある
clawr

12
@clawr:いいえ、exit()ページに残りのコンテンツが表示されないようにします(制限されたページと考えてください)。vartecは正しいです。HTTPLocation ヘッダーは何の関係もないので、必要はありませんexit簡単なリダイレクトの方法がわからない人は、高度なプロセスを利用できるように、単純で重要な手順を実装しないで安全にプレイする方がよいので、私はそれを私の回答に含めることにしました。コントロール。
Alix Axel 2013年

1
しかし、ヘッダーを尊重するブラウザーは、スクリプトの実行中にページを離れて接続を閉じます。これは完全に悪いです。PHPはしばらくの間スクリプトを続行します(そのため、コードが実行されます)が、実行の途中でランダムに中止され、内容が壊れたままになる場合があります。ignore_user_abort()を呼び出すとこれを防ぐことができますが、私はそれだけの価値はありません。(おそらく役に立たないかもしれませんが)HTMLの書き込みを続けますが、header( 'Location:');の後にディスクやデータベースに書き込むことは行わないでください。可能であれば、リダイレクトの前にディスクに書き込みます。[また、URLは絶対でなければなりません。]
FrancescoMM

ブラウザがHTTPプロトコルを検出する前にリダイレクトする方法はありますか?リダイレクトする必要があるのは、すべてのドメインに対して十分なSSL証明書を取得できないためです。.htaccessリダイレクトに使用しますが、最終的なドメインにリダイレクトされたドメインをなんとかして渡す方法が必要ですか?
oldboy

109
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()を忘れないでください!


6
そして、出力バッファリングを忘れないでください。そうしないと、「ヘッダーはすでに送信されました」という結果になります。
黒木風

8
...そして、「$ n秒後に$ nepageにリダイレクトされます。リダイレクトが行われない場合は、ここをクリックして$ nepageにアクセスしてください」などの印刷物を忘れないでください。
Strae、

3
@DaNieL:このタイプのリダイレクトには「$ n秒」はかかりません。それが発生した場合はすぐに実行され、準拠しているブラウザで処理できます。私は、人々がよく知らないときに使用する「メタリフレッシュ」リダイレクトについて考えていると思います。
rmeador 2009

1
@rmeador ...古いブラウザと専用ブラウザ向け。失敗した場合は、最初にLocationヘッダーを実行する必要があります。メタリダイレクトが失敗した場合に備えて、「x秒後にページにリダイレクトされます」というリンクが付いたメタリダイレクトがあります。これがリダイレクトを行うための適切でフェイルセーフな方法です。
アンドリュームーア

3
アンドリュー:HTTPブラウザーはどのように場所を尊重しないのですか?
vartec 2009

102

エコーを使用してPHPからJavaScriptを出力します。

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

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

バッファリングについての詳細(利点)

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


2
シンプルで正解です!単純なページリダイレクトに最適です。
Stathis Andronikos

そうすれば、一般的なCannot modify header information - headers already sent byエラーに遭遇することはありません。
Kai Noack

1
@ hmd、JavaScriptが無効になっている場合はどうなりますか?
イスティアケアーメド2017

最近、@ IstiaqueAhmed JavaScriptはほとんど常に有効になっていますが、無効になっている場合は、PHPバッファーを使用できます。このSOの質問はその答えです。PHPバッファリングを使用している場合は、この方法は必要ないと思います。
Hammad Khan

False、バッファリングしなくてもPHPで実行できます(そうする必要があります)。適切に設計されたページでは、HTMLコンテンツがユーザーに送信される前に、関連するすべてのPHP処理を実行する必要があります。これにより、PHPリダイレクトが正常に機能します。
MestreLion 2018

91

1.でヘッダー関数を使用する exit()

<?php 
     header('Location: target-page.php');
     exit();
?>

あなたは、いくつかの回ヘッダー機能を使用する場合は、あなたが得るだろう「ヘッダのような警告が既に送信」エコーやヘッダを送信する前に印刷されません解決するために、またはあなたは、単に使用することができるdie()か、exit()ヘッダー関数の後。

2.ヘッダーなし

<?php 
    echo "<script>location.href='target-page.php';</script>";
?>

ここでは問題に直面しません

3. ob_start()およびでヘッダー関数を使用するob_end_flush()

<?php
ob_start(); //this should be first line of your page
header('Location: target-page.php');
ob_end_flush(); //this should be last line of your page
?>

魅力のように働きます。<?php echo "<script> location.href = ' google.fr / ' ; </script >";を使用しています。それをテストするために、そしてそれは私が望んだことをした
DoctorDroidハイチ

1
2番目のソリューションは、JSが無効になっていると機能しません。
Tajni

55

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

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

重要な2行目を残すと、Daily WTFになる可能性があります。問題は、ブラウザがないということである持っているので、ヘッダは無視された状態で、ページの残りの部分は、リダイレクトなしで実行されるページの戻り、ヘッダを尊重します。


1
スクリプトを強制終了する前に、ユーザーにいくつかの出力を提供することは何ですか?ご存知のように、人々は何が起こっているのかを知りたいと思っています...
Strae

3
スクリプトはリダイレクト以外に何もしないと想定しています。それはまったく真実ではないかもしれません。
vartec 2009

13
@DaNieL:それを死ぬように変更します(「ヘッダーを無視しないでください!」)
nickf 2009

3
私はdie();あなたの簡単な説明が好きだった-あなたがそれをしなかった場合、あなたがそれを使用した場合、ユーザーは少しの間完全なページを見るかもしれません。ユーザーはリダイレクトされ、一時的なコンテンツの不具合は表示されません+ 1
TheBlackBenzKid

ヘッダーが送信された後、ブラウザーに何も送信しないがログに記録するかトランザクションの記録を終了するという有用なアクティビティを発生させることができます。このため、die / exitの必要性はスクリプトによって異なります。
DanAllen 2017年

28

使用する:

<?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()


25

セッション変数を使用して、ページへのアクセスを制御し、有効なユーザーを承認することもできます。

<?php
    session_start();

    if (!isset( $_SESSION["valid_user"]))
    {
        header("location:../");
        exit();
    }

    // Page goes here
?>

http://php.net/manual/en/reserved.variables.session.php

最近、サイバー攻撃を受けて、管理パネルまたはWebアプリケーションの予約部分にアクセスしようとしているユーザーを知る必要があると判断しました。

データベースに煩わされたくないので、テキストファイルにIPアドレスとユーザーセッションのログアクセスを追加しました。


19

これらの回答の多くは正しいですが、絶対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

16

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


ブラウザがHTTPプロトコルを検出する前にリダイレクトする方法はありますか?リダイレクトする必要があるのは、すべてのドメインに対して十分なSSL証明書を取得できないためです。.htaccessリダイレクトに使用しますが、最終的なドメインにリダイレクトされたドメインをなんとかして渡す方法が必要ですか?
oldboy

16

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

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

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)

11

訪問者を別のページにリダイレクトするには(特に条件付きループで便利)、次のコードを使用します。

<?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();
?>

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

PHPコードの解釈

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

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

なぜ(2番目の段落の終わり近く)ですか?あなたは意味するか&para(全体を読み込むので、代わりにmypage.php?param1=val1&param2=val2))?(HTMLエンティティpara)は "¶"です-たぶんいくつかの外部プログラムが変換しましたか?)
Peter Mortensen

9

使用する:

<?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.
?>

7

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

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

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


7

以下のようないくつかのJavaScriptメソッドを使用できます

  1. self.location="http://www.example.com/index.php";

  2. window.location.href="http://www.example.com/index.php";

  3. document.location.href = 'http://www.example.com/index.php';

  4. window.location.replace("http://www.example.com/index.php");


Javascriptはクライアントで実行されますが、これは探しているものとは異なる場合があります。
chharvey、2015

7

はい、header()関数を使用できます。

header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */
exit();

また、ベストプラクティスは、以下のコード実行を回避するために、関数の直後にexit()関数を呼び出すheader()ことです。

ドキュメントによると、header()実際の出力が送信される前に呼び出す必要があります。


6

他の人が言ったように、場所ヘッダーを次のように送信します:

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

ただし、他の出力をブラウザに送信する前に行う必要があります。

また、これを使用して、認証されていないユーザーを特定のページからブロックする場合、前述のように、一部のユーザーエージェントはこれを無視して現在のページを続行するため、死ぬ必要があることに注意してください( )送信後。


but you need to do it before you've sent any other output to the browser. 驚くばかり!!ヘッダーがすでに送信されたエラーを受信し続けた理由を数分検索してきました。+1 !!
ジョシュ2014年

より一般的には、/スクリプトを完全に停止/します。die()それを行う方法の1つにすぎません。
MauganRa 2016年

6

これが私の考えです。

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

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

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

これは最初に要求されたものを達成するための迅速で汚い方法ですが、この種のリダイレクトは常に301/302リダイレクトとして解釈されるため、検索エンジンは常にリダイレクトページとしてのインデックスページであり、ランディングページやメインページではありません。

したがって、それはウェブサイトのSEO設定に影響します。


1
exit()は、header()の直後に使用する必要があります
EKanadily

@docesam ..合意.. exit()はheader()呼び出しの直後に呼び出す必要があります。ただし、このheader()ステートメントの後にブラウザに出力がなければ、exit()は必要ないかもしれません-私の意見
Bhaskar Pramanik '20

はい。ただし、誰かがあなたのコード行を彼のスクリプトにコピーする可能性があり、何が問題だったかを理解するために長い間自分の周りを回っている可能性があるため、説明する必要があります。
EKanadily 2017

1
...それは既にロックが必要かどうか確認するために再びそれらを粉砕/プッシュ/プルにすばやくドアをロックする必要がありますが、その後、あなたが持っている想像@BhaskarPramanik
aswzen

5

PHPでリダイレクトする最良の方法は、次のコードです...

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

後にコードが機能しないことを確認してください

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

上記の行の前にすべてのコードを実行する必要があります。

仮に

ケース1:

echo "I am a web developer";
header("Location: /index.php");

場所(index.php)に正しくリダイレ​​クトされます。

ケース2:

return $something;
header("Location: /index.php");

上記のコードは場所(index.php)にリダイレクトしません。


あなたが提供する情報を含む1085を含む回答がすでにあります。
Patrick Hund 2017

5

はい、PHPを使用することは可能です。別のページにリダイレクトします。

次のコードを試してください:

<?php
    header("Location:./"); // Redirect to index file
    header("Location:index.php"); // Redirect to index file
    header("Location:example.php");
?>

4

1. header組み込みの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>";
   ?>

どういうわけか、JavaScriptビットは、サイトの最終ホスティングで機能していた唯一のものでした。キャッシュの問題だと思いますが、それですぐに解決しました。
cdsaenz

3

それには2つの方法があります。

  1. ユーザーが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に保存します

  2. いずれかの条件が真の場合、別のページにリダイレクトします。

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

これは何ですか?自分のウェブサイトへのリンクは使用しないでください。2番目の例では、PHP header()関数ではなく、JavaScriptリダイレクトを使用します。
スクリプトマン、

2

使用する:

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

1
あなたのコードの機能を説明できますか?あなたの回答は、その長さと内容のためにフラグが立てられました。
www139

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”);

    . . .

参照;



2

ルーティングのためのヘッダー関数の使用

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

またはの助けを借りる必要があるよりも、A.phpファイルからB.phpにルーティングしたいとします。例を見てみましょう<button><a>

<?php
if(isset($_GET['go_to_page_b'])) {
    header('Location: B.php');
    exit();

}
?>

<p>I am page A</p>
<button name='go_to_page_b'>Page B</button>

B.php

<p> I am Page B</p>

正確な解決策または良い解決策を提供できますか?
Mehedi Abdullah

すでに多くの解決策があります。あなたのソリューションには、PHPタグなしでHTMLとPHPが混在しています。次に、htmlコードを印刷した後にヘッダーを送信するため、機能しません。そして、サンプルファイルの名前は悪いです。A.phpやB.phpという名前は付けないでください。これは単なる例ですが、命名規則に注意する必要があります。
Tajni

1

Apacheで実行している場合は、リダイレクトに.htaccessを使用することもできます。

Redirect 301 / http://new-site.com/

1

PHP header関数を使用してリダイレクトを試みることができます。ブラウザがリダイレクト警告を画面にスローしないように、出力バッファを設定する必要があります。

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

1
exit()はheader()の直後に使用する必要があります。また、出力バッファリングは、しばらくの間、デフォルトで自動的にオンになっています。
EKanadily 2017

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.