PHP を使用してユーザーを別のページにリダイレクトすることは可能ですか?
ユーザーが にwww.example.com/page.php
アクセスして にリダイレクトしたいとしwww.example.com/index.php
ます。メタ リフレッシュを使用せずにどのようにリダイレクトしますか? 出来ますか?
これにより、許可されていないユーザーからページを保護することさえできます.
PHP を使用してユーザーを別のページにリダイレクトすることは可能ですか?
ユーザーが にwww.example.com/page.php
アクセスして にリダイレクトしたいとしwww.example.com/index.php
ます。メタ リフレッシュを使用せずにどのようにリダイレクトしますか? 出来ますか?
これにより、許可されていないユーザーからページを保護することさえできます.
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 の実行は停止しません。
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()
。
echo を使用して PHP から JavaScript を出力します。
echo '<script type="text/javascript">
window.location = "http://www.google.com/"
</script>';
ページ出力をバッファリングし、後でリダイレクト条件を確認しない限り、PHP で実際に行うことはできません。それは面倒すぎるかもしれません。ページから最初に送信されるのはヘッダーであることに注意してください。通常、リダイレクトのほとんどは、ページの後半で必要になります。そのためには、ページのすべての出力をバッファリングし、後でリダイレクト条件を確認する必要があります。その時点で、ページの user header() をリダイレクトするか、バッファリングされた出力を単純にエコーすることができます。
バッファリングの詳細 (利点)
使用する:
<?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()
。
次のコードを使用します。
header("Location: /index.php");
exit(0);
header( 'Location: http://www.yoursite.com/new_page.html' );
私はすでにこの質問に答えていますが、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 リダイレクト コード ( 301
、302
、303
および) をサポートする問題も処理しました。307
説明は次のとおりです。
セマンティック Web の前夜には、正確性を考慮する必要があります。残念ながら、PHP の "Location" ヘッダーはまだHTTP 302リダイレクト コードを使用していますが、これは厳密にはリダイレクトに最適なものではありません。代わりに使用する必要があるのは303です。
W3C は親切にも、303 ヘッダーは「HTTP/1.1 より前の多くのユーザー エージェント」と互換性がなく、現在使用されているブラウザーは存在しないと述べています。つまり、302 は遺物であり、使用すべきではありません。
...または、他のみんなと同じように、無視することもできます...
これを行うには複数の方法がありますが、必要に応じ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”);
. . .
参考文献;
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
秒数を数えた後のリダイレクトのようなものが好きです
<?php
header("Refresh: 3;url=https://theweek.com.br/índex.php");