Tags:,, Posted in Linux开发, Linux软件 我抢沙发

本篇主要介绍在php脚本级实现url转发的原理和方法,其实实现url转发的方法有很多,例如我们也可以利用apache的rewrite模块进行非常灵活的url转发。

url转发是将对域名A的访问定向到对网址B的访问去,因为B通常很长比较难记,而A会比较简单比较好记,这就是Url转发的好处。从实现原理上说其实是用了HTTP协议中的302跳转,即当服务器返回HTTP 302时,同时返回要重定向的Url,浏览器判断到302之后会自动对新的Url发起请求,而对于浏览者来说是察觉不到这一切的。

如果需要自己配置url转发那么首先就需要一台独立的服务器,具有独立ip,并且将待转发的域名A的A记录指向这台服务器的ip。域名解析做好之后接下来就需要对服务器进行配置了。

首先我们需要在服务器上有一个默认站点C,即用服务器ip可以直接访问到的站点。如果Apache上运行有虚拟主机的话,务必保证站点C是所有虚拟主机的第一个,Apache的官方文档对此有解释:

如果一个请求的 Host:头中包含未知信息,或者干脆就没有,那么它会被第一 个基于域名的虚拟主机(就是在配置文件中首先出现的使用了那个地址/端 口对的虚拟主机)处理。

站点C的Apache配置文件块如下:

<VirtualHost *:80>
DocumentRoot /home/leconte/docroot/
DirectoryIndex index.php
</VirtualHost>

然后在目录/home/leconte/docroot/下放一个文件index.php

<?php
function redirect($url)
{
    header("Location: ".$url);
}
$map = array(
    "mail.oolec.com" => "https://mail.google.com/a/oolec.com",
    "read.oolec.com" => "http://www.google.com/reader",
    "tongji.oolec.com"=>"http://tongji.linezing.com/mystat.html",
    );
 
if ( isset($map[$_SERVER["SERVER_NAME"]]) )
{
    redirect($map[$_SERVER["SERVER_NAME"]]);
    die();
}
echo "Nothing";
?>

在上述程序中,当Host是mail.oolec.com,read.oolec.com,tongji.oolec.com时,会使用php的header函数向浏览器发送302重定向,定向到到变量$map中定义的url。而如果Host不是指定的这三个,则简单的echo一句”nothing”。

如果需要添加多个重定向只需扩充这个map即可,如果有成千上万需要重定向的Url,那么最好是用数据库来保存这个对应关系。

© 2010, Linux爱好者. 版权所有. 转载请注明来自http://www.linuxers.cn

收藏本文到网摘: 百度搜藏 QQ书签 Google书签 Del.icio.us 新浪ViVi 雅虎收藏 饭否 365Key网摘 天极网摘 POCO网摘 和讯网摘

推荐日志

    二月 4, 2010