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

假设您的网站不是真的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=.

于 2012-12-21T16:13:13.753 回答
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 回答
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,您可以$_GET['url']根据这些值检查 的值,然后相应地重定向用户。这可以是此 PHP 文件中手动编写的数组,也可以是其值已从数据库中收集的数组。

您也可以使用条件if/elseswitch条件,但这会使您的代码更长。这不是一个糟糕的选择,尽管它不太实用。

此外,如果您在此特定页面中有任何其他代码,请确保您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 回答
0

不要传递数字,而是尝试传递实际的 url。当您最初将 url 放在链接上时,请确保对其进行编码,并且当您尝试将其读回时,请确保对其进行解码。

$offer = urldecode($_GET['url']);

header("Location: ". $url);

您还可以将 number 和 url 的映射存储在数据库中,然后只需查询 number 与您发送的内容匹配的 url。

另一种选择是有一个数组,你有那个映射。

<?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 回答