2

私は自分のサイトのリンクをそのようにリダイレクトしたい...

http://mysite.com?url=1

$offer = $_GET['url'];

if ($offer == '1'){
  header("Location: http://site1.com");
}
if ($offer == '2'){
  header("Location: http://site2.com");
}

これは機能的ですが、50個のifステートメントを使用するよりも、これを行うためのより良い方法はありますか?

4

7 に答える 7

3

識別子と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
}
于 2012-12-21T16:11:49.390 に答える
3

あなたのサイトが実際にはそうではないと仮定するsite1.comsite2.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=

于 2012-12-21T16:13:13.753 に答える
0
header("Location: http://site{$url}.com"); //success!!

また

header("Location: http://site" . $url . ".com"); //success!!

ただし、そのようなユーザー(クライアント)の入力に依存しないでください。

ヘッダーを作成する前に少し検証してください。そうしないと、問題が発生します...

于 2012-12-21T16:06:53.837 に答える
0

これらがこの形式である限り、次を使用できます。

$offer = $_GET['url'];

header("Location: http://site".$offer.".com");

$offerを整数としてチェックしたい場合があります$offer = intval($offer)

于 2012-12-21T16:07:57.017 に答える
0

dbのテーブルを使用し、idを検索して、単一のheader()または配列を使用します$ redirect [option] header( "Location:" $ redirect [option]);

于 2012-12-21T16:08:45.363 に答える
0

数値を渡す代わりに、実際の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]);

?>
于 2012-12-21T16:10:08.920 に答える
0

可能な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;
于 2012-12-21T16:21:54.450 に答える