PHP URL重定向 - 我这样做了吗?

时间:2012-12-21 16:05:48

标签: php

我希望我的网站上的链接能够像这样重定向......

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语句?

7 个答案:

答案 0 :(得分:3)

将您的标识符和网址存储在关联数组中:

$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
}

答案 1 :(得分: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=中的非数字值之类的事情。

答案 2 :(得分:0)

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

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

但请不要依赖用户(客户端)输入。

在制作标题之前稍微验证一下,否则你会遇到问题......

答案 3 :(得分:0)

只要他们使用这种格式,您就可以使用:

$offer = $_GET['url'];

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

可能要将$ offer检查为整数$offer = intval($offer)

答案 4 :(得分:0)

在db上使用表,搜索id并使用单个header()或数组$ redirect [option] header(“Location:”$ redirect [option]);

答案 5 :(得分:0)

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

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

header("Location: ". $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]);

?>

答案 6 :(得分:0)

您可以拥有一系列可能的网址,您可以针对这些值检查$_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;