您的位置:首页 > 编程语言 > PHP开发

分享一段PHP重定向网址代码

2011-08-29 08:33 295 查看
前不久整一个微博客,需要使用一个网址重定向功能,就是通过站内的go.php文件将某个站内链接,跳转到站外地址上,这和平时常用的网址转向、定时转向、网页加载后转向等有所不同,要转向的只是一个链接,而非实际页面。

刚开始在网上搜索到了一段代码,主要用处是通过“
go.php?url= ”直接获取要转到的 URL 地址并显示出来,代码如下:

go.php文件源码:

<?php

$url=$_GET["url"];

echo "访问地址是:<a href='$url'>$url</a>";

?>

对该代码略作修改即可实现获取要转到的 URL 地址并转向功能,修改后的go.php文件源码为:

<?php

$url=$_GET["url"];

header("Location: $url");

exit;

?>

经过测试,使用该方法可以成功将“ http://www.xxx.com/go.php?url=http://hi.baidu.com/ofree ”的链接地址转向到本站,但问题也随之出现了,就是这段PHP重定向的代码是开放式,而开放重定向网址很容易被别人滥用,发送一些垃圾信息,导致搜索引擎的屏蔽。

因此,需要对这段代码重定向的网址范围进行简单的限定。重新修改了go.php文件的源码,增加了单一的网址限定功能:

<?php

$url=$_GET["url"];

if(strpos($url,"baidu.com")>0) header("Location: $url");

exit;

?>

经过上面的修改后,go.php文件就只能转向"baidu.com"域名下的网址了,这是一个单域名的限制,如果进行多个域名设置就更加完善,类似于“转向白名单”的功能,于是请教了单位的程序员,给出了以下go.php重定向源码:

<?php

$url=$_GET["url"];

if($url){

$okarr=array(0=>"qq.com",1=>"163.com");

$urlarr=@parse_url($url);

if (is_array($urlarr))

{

$dirurl="";

if (isset($urlarr["host"])){

$dirurl=$urlarr["host"];

}

else{

$dirurl=$urlarr["path"];

}

}

$urlarr=explode('.',$dirurl);

$dirurlstr="";

for($i=count($urlarr)-1;$i>=0;$i--){

if($i==count($urlarr)-1){

$dirurlstr=$urlarr[$i].$dirurlstr;

}

else{

$dirurlstr=$urlarr[$i].'.'.$dirurlstr;

break;

}

}

if(stristr($url,'http://')===false) $url='http://'.$url;

if(in_array($dirurlstr,$okarr)) header("Location: $url");

}

?>

该代码同前几段相比增加了两个功能,一是“转向白名单”,允许重定向多个域名下的网址,二是判断要转向的URL是否添加了http://,如果没有就自动补上。至此一段完整PHP重定向网址代码就出炉了,通过该代码可以实现“ http://www.xxx.com/go.php?url=限定域名下网址 ”的跳转功能。

此外,利用 frame 和 js 还可以实现保留转向前地址的功能,代码如下:

<body style="padding:0px; margin:0px;">

<iframe id="test" src="" width="100%" frameborder="0" scrolling="auto"></iframe>

<SCRIPT language="JavaScript" type="text/JavaScript">

<!--

var urlvalue;

if(location.search!=="")

{

urlvalue=location.search;

if(urlvalue.indexOf("http://")!==-1 && urlvalue!=="?")

{

urlvalue=urlvalue.substr(1);

}

else

{

urlvalue="http:\/\/www.xxx.com\/";

}

}

if(urlvalue!==""){

document.getElementById("test").src=urlvalue;

document.getElementById("test").height="100%";

}

function killErrors() {return true;}window.onerror = killErrors;

//-->

</SCRIPT>

</body>

以上这些代码,仅供大家研究参考,能不用最好不要用,因为按照 Google 管理员工具中关于开放重定向网址的说明,搜索引擎会尽量避免将遭到滥用的网址编入索引。转自:http://hi.baidu.com/waige1986/blog/item/792ab1516673592843a75b0b.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: