私は自分のサイトのリンクをそのようにリダイレクトしたい...
$offer = $_GET['url'];
if ($offer == '1'){
header("Location: http://site1.com");
}
if ($offer == '2'){
header("Location: http://site2.com");
}
これは機能的ですが、50個のifステートメントを使用するよりも、これを行うためのより良い方法はありますか?
私は自分のサイトのリンクをそのようにリダイレクトしたい...
$offer = $_GET['url'];
if ($offer == '1'){
header("Location: http://site1.com");
}
if ($offer == '2'){
header("Location: http://site2.com");
}
これは機能的ですが、50個のifステートメントを使用するよりも、これを行うためのより良い方法はありますか?
識別子とURLを連想配列に格納します。
$list = array(
'1' => 'http://site1.com',
'2' => 'http://site2.com'
);
次に、キーに一致する値を探します。
if (array_key_exists($_GET['url'], $list)) {
header('Location: ' . $list[$_GET['url']]);
} else {
// bad key
}
あなたのサイトが実際にはそうではないと仮定するsite1.com
とsite2.com
(もしそうだったら感動するでしょう)、これはおそらく問題に取り組む良い方法です:
$sites = array(
'1' => 'http://www.google.com/',
'2' => 'http://www.bing.com/'
);
if (isset($sites[$_GET['url']])) {
header('Location: ' . $sites[$_GET['url']]);
die();
} else {
die('Sorry, this does not exist.');
}
もちろん、これにより、で数値以外の値を受け入れるなどのこともできます?url=
。
header("Location: http://site{$url}.com"); //success!!
また
header("Location: http://site" . $url . ".com"); //success!!
ただし、そのようなユーザー(クライアント)の入力に依存しないでください。
ヘッダーを作成する前に少し検証してください。そうしないと、問題が発生します...
これらがこの形式である限り、次を使用できます。
$offer = $_GET['url'];
header("Location: http://site".$offer.".com");
$offerを整数としてチェックしたい場合があります$offer = intval($offer)
dbのテーブルを使用し、idを検索して、単一のheader()または配列を使用します$ redirect [option] header( "Location:" $ redirect [option]);
数値を渡す代わりに、実際のURLを渡してみてください。最初にURLをリンクに配置するときは、必ずエンコードし、読み戻そうとするときは、必ずデコードしてください。
$offer = urldecode($_GET['url']);
header("Location: ". $url);
また、データベースの番号とURLのマッピングを保存してから、番号が送信内容と一致するURLをクエリすることもできます。
もう1つの方法は、そのマッピングがある配列を作成することです。
<?php
$array = array(
1 => "http://www.google.com",
2 => "http://www.yahoo.com",
3 => "http://www.msn.com",
4 => "http://www.reddit.com"
);
$offer = $_GET['url'];
header("Location: " . $array[$offer]);
?>
可能なURLの配列を作成し、の値を$_GET['url']
これらの値と照合して、ユーザーをそれに応じてリダイレクトすることができます。これは、このPHPファイル内に手動で記述された配列、またはデータベースから値が収集された配列の場合があります。
if/else
条件または条件を使用することもできますswitch
が、それによってコードが長くなります。実用的ではありませんが、悪い選択肢ではありません。
また、この特定のページに他のコードがある場合は、リダイレクトの前に実行されないようexit;
に、関数の後にあることを確認してください。header()
$urls = array(
1 => 'www.someurl.com',
2 => 'www.someotherurl.com'
);
$key = @trim($_GET['url']);
if (!empty($key) && isset($urls[$key]))
header('Location: http://' . $urls[$key]);
else
// fallback
header('Location: http://www.defaulturl.com');
exit;