短链接技术干货分享
短链接(Short Link)顾名思义就是长度比较短的网址。如:http:/ /mrw.so。早期,短链接主要应用在网站的图片上传中,上传网站通过特定的算法缩短 URL(Uniform
Resource Locator,统一资源定位符)链接地址,达到减少代码字符数的目的。
随着短信线上营销的快速发展,营销的信息传播、信息分享较之传统的网络形式进一步加速,所分享的内容也呈多样化趋势,使得短链接服务活跃起来。而短链接生成器正好解决了这种问题,借助短链接生成器可以用简短的网址替代原来冗长的网址,给用户留下更多的正文空间。
1、短链接的实现原理
短链接主要是通过域名重定向技术,将长网址通过一定的算法转换成一个短链接。当用户访问这个短链接时就可以直接跳转到较长的 U R L 地址上。域名重定向技术也可以称为U R L 转发技术,它是通过网站服务器或者各种应用程序的设置,将访问当前域名的用户引导至指定的另一个 URL 地址。
短链接生成器通常使用的是 301、302 或者 META 转向:1)301、302 转向
使用 php 中的 header() 函数可以实现 301重定向(永久性转移)或 302 重定向(暂时性转移)。
当客户端访问短链接的 php 页面时,服务器端使用header() 函数向客户端发送原始的 H TTP 报头,在 H TTP 数据头中的Location段中给出相应的长地址。
header函数说明见表
例:header('Location:http:/ /mrw.so /',true ,301)。表示向客户端浏览器发送命令,强制 H TTP 响应代码为 301,并将该报头替换之前的报头,将重定位地址设为 http:/ /mrw.so
2)META 刷新转向
利用 H TM L 标记 M E TA 中的 R E FR E SH,设定相应的跳转地址,在特定时间后重定向到新的网页 。例 :H TTP-EQ
U IV="R E FR E SH " CO N TEN T="5; U R L=index.asp">。在等待 5 秒后,网页将通过刷新的办法重定位到index.asp 的网页。
2、短链接网站的快速搭建,.
目前互联网上许多个人短链接服务都使用 php 的转向方式,互联网也有许多完整的 php 源码网站,方便个人搭建自己的短链接网站。Phurl是网上较为流行的短链接网站源码,其通过 PH P 和 M ySQ L 实现网址缩短服务,程序仅19K B,包括建库脚本和后台程序。Phurl的搭建极为简单,如下所示 :
1) 在支持 PH P 的服务器中,将 Phurl网站文件放到需要建立网站的目录下。
2) 在 M ySQL 中新建一个数据库。
3) 通过导入 phurl.sql文件,建立所需的数据表 phurl_settings和 phurl_urls。
4) 根据自身需求,修改config.php文件内的配置信息。
5) 进行测试,通过访问 index.php,可以对长网址进行缩短处理,短链接则通过 redirect.php 的处理转向长网址所在的网页。
3、短链接服务的转换算法
Phurl的转换算法就是将短码和长网址在本地数据库建立一一对应的关系。用户访问短链接时,后台通过查找到对应的长网址,通知客户端,客户端进行页面转向操作。
phurl_urls的数据表中存放了id,url,code,alias,date_added;phurl_settings的数据表中仅存放 last_num ber。id 是自增长的主键,url是长网址,code是短码,alias是别名,date_added是记录添加时间,last_num ber是最后一条记录的整数。
算法实现主要函数如表
为了尽可能缩短短链接的字符串长度,Phurl采用了更高进制的表示规则。短码 code 就是是通过函数
generate_code($num ber)产生的高进制数。函数源码如下:
function
generate_code($num ber)
{
$out =
"";
$codes =
"abcdefghjkm npqrstuvwxyz23456789ABCDEFGH JK
M NPQRSTUVW
XYZ";
while ($num ber
> 53)
{
$key = $num ber
% 54;
$num ber =
floor($num ber / 54) - 1;
$out =
$codes{$key}.$out;
}
return
$codes{$num ber}.$out;
}
函数中自定义了数字和大小写的字母组成的 54 位字符串,从前至后每个字符代表为 54 进制中 0-53。如果用上面的 54进制表示,则 4 个字符长的短码则可以表达 850万多条记录,6 个字符长的短码则可以表达 247 亿多条记录。
4、长网址转短码一般流程:
1)在数据表 phurl_urls中查找是否已存在该长网址记录,有则返回对应的短码 ;
2)无记录则取数据表 phurl_settings中 last_num ber进行高进制转换得到短码 ;
3)数据表 phurl_settings中 last_num ber加一备以后使用;
4)在 phurl_urls表尾插入短码及长网址对应的新记录。
根据 Phurl的算法,短码无规律可言,短链接和长网址间不存在文本上的关联关系,由于高进制对应字符串的不同,以及短链接请求的先后顺序不同,会导致同样使用 Phurl的不同网站对同一长网址的处理所得到的结果不同。