本篇主要介绍在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












