当前位置:首页 > 短网址资讯

短网址的今生前世

www.ft12.com9年前 (2017-06-16)短网址资讯2313

  短网址司空见惯,比如说下面这些

  http://u6.gg/baidu => http://www.baidu.com

  http://rrd.me/baidu => http://www.baidu.com,等等

  访问这些网址的时候,前后一对的指向同一个页面,我这里只是在举例子,这些短网址在weibo或者类似的社交网络中经常见到,由于原始链接地址特别长,这个时候短网址就会大显威力,简短好记,但也有他的缺点,比如说短网址不一定直接看出网址中的一些信息(在长网址中是可以看到一些信息的)。

  整天接触这个,以至于在还没有真正弄明白他的原理的时候就在思想中烙下了“没什么”的烙印,这就错过了一些知识,这种情况在心理学上应该叫心里暗示吧,有人知道是这样吗?

原理

  首先我猜测这个是通过重定向实现的,dwz.cn是一个服务器,用来接收一些短网址,这些短网址是经过dwz.cn处理之后的,在dwz.cn中有该短网址对应的长网址的记录,然后从数据库中获取短网址对应的长网址,然后302重定向。看看具体是不是这样的。

  通过浏览器访问http://u6.gg/baidu,对请求进行分析(这里使用chrome的调试工具,也可以使用wireshark之类的工具),可以得到下面的数据:

  没错,可以看到在访问http://www.ft12.com的时候确实进行了重定向,定向到新的地址,这个新地址正好是该短地址对应的唯一的长地址,剩下的过程就和普通访问http://www.cnblogs.com/iforever/p/4313704.html这个地址时候的一样了。

注意

  从短链接到长连接,还需要配置下rewrite,这样可以最大限度的减少长度,省去类似index.php?url=这样的字符串,而直接是http://www.ft12.com这样的格式,url重写配置很简单,我用的是新浪云测试的,下面是配置的rewrite规则

name: abit
version: 1handle:- rewrite: if (!-d && !-f && path ~ "/(.*)$") goto "do.php?url=$1&act=out"

  handle:后面的就是rewrite规则,新浪云的具体的详细规则到这里看http://u6.gg/page/apidoc.php,很简单,nginx、apache的配置也类似。

  重定向完成之后还有一个要注意的地方就是在传递参数的时候要进行urlencode,重定向之前要用urldecode。在未使用urlencode的时候传递url类型的参数,在获取的时候可能丢掉部分信息,因此在生成短链接之前传递参数的时候要将url进行escape处理,将特殊字符串进行编码,在访问短链接处理的时候需要对编码的url进行urldecode处理,还原成正常的链接,否则在header跳转的时候不会把该链接当成一个正常的url,跳转之后会把该url附加的之前页面的主机后面类似http://abit.sinaapp.com/www.cnblogs.com,可能会出现错误,因此,这里要特别注意。

  sae的在重定向的时候会有一个问题,会将双反斜线自动过滤为一个,例如从http://rrd.me/到http://985.so/,注意,这里少了个反斜线,这在处理的时候要特别注意,不然可能会遇到不必要的麻烦。

编码

  主要的处理部分

<?phpclass snapshotUrl{    //进行编码的数据库,没6位二进制数对应一个字符,一共需要64位,因此选取
    //52+10+2个特殊字符
    private static $basedb = array(        '(',')','a','b','c','d',
        'e','f','g','h','i','j',
        'k','l','m','n','o','p',
        'q','r','s','t','u','v',
        'w','x','y','z','A','B',
        'C','D','E','F','G','H',
        'I','J','K','L','M','N',
        'O','P','Q','R','S','T',
        'U','V','W','X','Y','Z',
        '0','1','2','3','4','5',
        '6','7','8','9',
    );    private function long2short($url){        $hex = md5($url);        $out = '';        $hex = 0x7FFFFFFF & (1 * ('0x'.substr($hex, 0, 8)));        for($i=0; $i<5; $i++){            $index = 0x3f & $hex;            $out .= self::$basedb[$index];            $hex = $hex>>6;
        }        return $out;
    }    public function retJson($arr){        return json_encode($arr);
    }    //对url进行映射保存
    public function dispose($url, $act){        $mysql = new SaeMysql();        switch ($act) {            case 'in':                $short = $this->long2short($url);                $url = addslashes($url);                $sql = "insert into `tiny_url`(`short`,`long`) values ('{$short}','{$url}')";                $mysql->runSql($sql);                if($mysql->errno() != 0){                    echo "生成失败";
                }else{                    echo "http://abit.sinaapp.com/{$short}";
                }                break;            case 'out':                if(strlen($url) > 5)                    echo $this->retJson(array("code"=>"-1","msg"=>"没有这条记录"));                $sql = "select * from `tiny_url` where `short`='{$url}' limit 1";                $data = $mysql->getData($sql);                if(!$data) {                    echo $this->retJson(array("code"=>"-1","msg"=>"没有这条记录"));
                }else{                    $location = urldecode($data[0]['long']);                    header("Location: {$location}");                    exit();
                }                break;            
            default:                # code...
                break;
        }
    }    
}$url = isset($_GET['url']) ? $_GET['url'] : null;$act = isset($_GET['act']) ? $_GET['act'] : null;$snapshotUrl = new snapshotUrl();if($url === null || $act === null)    echo $snapshotUrl->retJson(array("code"=>"-1","msg"=>"参数错误"));$snapshotUrl->dispose($url, $act);

 

结果

  我做了个可以测试的小网页:

  https://www.ft12.com/有兴趣的可以试试

扫描二维码推送至手机访问。

版权声明:本文由短链接发布,如需转载请注明出处。

本文链接:https://www.ft12.com/article_209.html

分享给朋友:

相关文章

FT12短网址教你如何利用大数据算法定位网站性能瓶颈(BOSS)

FT12短网址教你如何利用大数据算法定位网站性能瓶颈(BOSS)

FT12短网址资讯:架构师非常关注性能问题,上篇文章中我们介绍了京东的自动化压测体系 ForceBot,这篇文章来自 LinkedIn 的技术博客,介绍如何通过大数据算法来分析调用数据,自动定位性能瓶颈。本文由高可用架构翻译。背景我们 FT…

好标题≠标题党,学会这5招,你也能打造刷爆朋友圈的新媒体标题

好标题≠标题党,学会这5招,你也能打造刷爆朋友圈的新媒体标题

奥美创始人大卫·奥格威有一句经典名言“如果你的标题没有吸引到受众的目光,相当于浪费了80%的广告费。对于做内容的人而言,你就浪费了80%的精力和时间”。标题对于一篇文章的重要性不言而喻。但是,好标题≠标题党,一个有传播性的新媒体标题不仅应该…

PHP编程需要掌握的20个要点,能极大提高效率

PHP编程需要掌握的20个要点,能极大提高效率

[摘要] 用单引号取代双引号来包括字符串,这样做会更快一些。由于PHP会在双引号包抄的字符串中征采变量,单引号则 不会,留意:只要echo能这么做,它是一种能够把多个字符串看成参数的“函数”用单引号取代双引号来包括字符串,这样做会更快一些。…

从产品、市场、投资等,深入了解与分析共享充电宝

从产品、市场、投资等,深入了解与分析共享充电宝

从4月开始,继共享单车之后,共享充电宝突然为科技创投圈所青睐。共享充电宝前景如何?本文作者从产品、市场、投资等多个维度对此进行了分析,共享充电宝的未来似乎并不那么扑朔迷离。忽如一夜春风来,千树万树梨花开。今年春天,共享充电宝火了。3月31日…

一条徐沪生比papi酱更有价值,短网址真的比直播更适合内容创业者吗?

一条徐沪生比papi酱更有价值,短网址真的比直播更适合内容创业者吗?

[ ft12短网址导读 ] 与papi酱的过气构成鲜明对比的是,短视频职业却越来越火,被称为直播之后的又一个内容创业风口,新老互联网巨头都争着往里面砸钱。用户为什么俄然对短视频产生了如此激烈的需求?真实能够依靠的盈利模式又是什么?…

如何在一个月内,低成本获取前1000个高质量种子用户?

【来源丨人人都是产品经理】【编辑丨善小花】 要钱没钱,要资源没资源,想到起步获取种子用户就头大?辛辛苦苦熬夜写出的内容没人看,拉不来一个用户?拉来的用户只想褥羊毛不会反馈贡献,羊毛褥完就跑?眼看有上千号种子用户,但是却没有几个能够…

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。