我希望我的网站上的链接能够像这样重定向......
$offer = $_GET['url'];
if ($offer == '1'){
header("Location: http://site1.com");
}
if ($offer == '2'){
header("Location: http://site2.com");
}
这是有用的,但有没有更好的方法来做到这一点,而不是有50个if语句?
答案 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.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=
中的非数字值之类的事情。
答案 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;