分享一段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
刚开始在网上搜索到了一段代码,主要用处是通过“
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
相关文章推荐
- 一段功能齐全的PHP常用重定向代码html+js+header
- 分享一段程序代码:用PHP做图片锐化程序[绝对好用]
- 分享一段php获取任意时间的前一天代码
- 分享一段php获取linux服务器状态的代码
- 分享一段php代码,用于判断内容是否经过urlencode()编码
- 分享一段php判断url http状态码的代码
- php版获取重定向后地址的代码分享
- 分享一段php获取linux服务器状态的代码
- 使用PHP实现二分查找算法代码分享
- php获取Alexa网站排名、流量、访问量、页面浏览量代码函数分享
- php分页代码学习示例分享
- php导出csv格式数据并将数字转换成文本的思路以及代码分享
- php实现可以设置中奖概率的抽奖程序代码分享
- 获取当前网址URL(PHP代码函数)
- 效率为王 分享几个提升php运行效率的代码规范写法详解
- 巧用php中的array_filter()函数去掉多维空值的代码分享
- 写一段简单的PHP建立文件夹代码
- [分享]一段导出到word模版的代码
- 用PHP写一段代码,实现不使用第3个变量,交换$a、$b的值,$a、$b的初始值自己定。(五种方法实现)
- php使用strtotime和date函数判断日期是否有效代码分享