web-dev-qa-db-ja.com

PHPで同じページにリダイレクトする方法

PHPを使用して同じページにリダイレクトするにはどうすればよいですか?

たとえば、ローカルの私のWebアドレスは次のとおりです。

http://localhost/myweb/index.php

私のウェブサイト内で別のページにリダイレクトするにはどうすればいいですか?

header("Location: clients.php");

私はこれが間違っているかもしれないことを知っていますが、本当に全部を置く必要がありますか?後でそれがhttp://localhost/

このようなことをする方法はありますか?また、多くのコードがあり、最後にコードの処理が完了した後、それを使用してリダイレクトしようとしています。それは大丈夫ですか?

31
user710502

現在のページに関する情報を返す多くの異なる $_SERVERdocs )プロパティがありますが、私が好む方法は$_SERVER['HTTP_Host']を使用することです:

header("Location: " . "http://" . $_SERVER['HTTP_Host'] . $location);

ここで、$locationは、/で始まるドメインの後のパスです。

12
Nicole

同じページをリロードするための私の好ましい方法は$ _SERVER ['PHP_SELF']です

header('Location: '.$_SERVER['PHP_SELF']);
die;

Header()の後に死ぬか終了することを忘れないでください。

編集:(@RafaelBarrosに感謝)

クエリ文字列も必要な場合は、使用します

header('Location:'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']);
die;

編集:(@HugoDelsingに感謝)

HtaccessのURL操作が有効な場合、$ _ SERVER ['PHP_SELF']の値が間違った場所に移動する可能性があります。その場合、正しいURLデータはリダイレクトの$_SERVER['REQUEST_URI']にあります。これは、以下のNabilの答えのようになります。

header("Location: http://$_SERVER[HTTP_Host]$_SERVER[REQUEST_URI]");
exit;

必要に応じて、$ _ SERVER [REQUEST_URI]を使用して$_SERVER['PHP_SELF']に正しい値を割り当てることもできます。これは、リダイレクト機能を頻繁に使用し、それを変更したくない場合に役立ちます。次のように、リクエストハンドラに正しい値を設定するだけです。

$_SERVER['PHP_SELF'] = 'https://sample.com/controller/etc';
77
Syntax Error

別のエレガントなものは

header("Location: http://$_SERVER[HTTP_Host]$_SERVER[REQUEST_URI]");
exit;
19
Nabil Kadimi

本当に普遍的になるために、私はこれを使用しています:

$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' 
    || $_SERVER['SERVER_PORT'] == 443) ? 'https://' : 'http://';
header('Location: '.$protocol.$_SERVER['HTTP_Host'].$_SERVER['REQUEST_URI']);
exit;

好き $_SERVER['REQUEST_URI']これはmod_rewriteやGET変数を尊重するためです。

https://stackoverflow.com/a/2886224/94737 からのhttps検出

8
squarecandy
header('Location: '.$_SERVER['PHP_SELF']);  

また動作します

1
Lead Developer

クエリパラメータを気にしない場合の簡単な方法:

header("location: ./");
0
digout

header("Location: ");(値なし)を使用してみたところ、現在のページにリダイレクトされました。

0
user10141671

以下の単純な行は問題なく機能します。

header("Location: ?");
0
Sergey