1. <tr id="33chb"><label id="33chb"></label></tr>
  2. <pre id="33chb"></pre>
    當前位置:首頁 > 短網址資訊 > 正文內容

    短網址的今生前世

      短網址司空見慣,比如說下面這些

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

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

      訪問這些網址的時候,前后一對的指向同一個頁面,我這里只是在舉例子,這些短網址在weibo或者類似的社交網絡中經常見到,由于原始鏈接地址特別長,這個時候短網址就會大顯威力,簡短好記,但也有他的缺點,比如說短網址不一定直接看出網址中的一些信息(在長網址中是可以看到一些信息的)。

      整天接觸這個,以至于在還沒有真正弄明白他的原理的時候就在思想中烙下了“沒什么”的烙印,這就錯過了一些知識,這種情況在心理學上應該叫心里暗示吧,有人知道是這樣嗎?

    原理

      首先我猜測這個是通過重定向實現的,dwz.cn是一個服務器,用來接收一些短網址,這些短網址是經過dwz.cn處理之后的,在dwz.cn中有該短網址對應的長網址的記錄,然后從數據庫中獲取短網址對應的長網址,然后302重定向??纯淳唧w是不是這樣的。

      通過瀏覽器訪問http://u6.gg/baidu,對請求進行分析(這里使用chrome的調試工具,也可以使用wireshark之類的工具),可以得到下面的數據:

      沒錯,可以看到在訪問http://www.virginiabusinesslawupdate.com的時候確實進行了重定向,定向到新的地址,這個新地址正好是該短地址對應的唯一的長地址,剩下的過程就和普通訪問http://www.cnblogs.com/iforever/p/4313704.html這個地址時候的一樣了。

    注意

      從短鏈接到長連接,還需要配置下rewrite,這樣可以最大限度的減少長度,省去類似index.php?url=這樣的字符串,而直接是http://www.virginiabusinesslawupdate.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);

     

    結果

      我做了個可以測試的小網頁:

      http://www.virginiabusinesslawupdate.com/有興趣的可以試試

    掃描二維碼推送至手機訪問。

    版權聲明:本文由短鏈接發布,如需轉載請注明出處。

    本文鏈接:http://www.virginiabusinesslawupdate.com/article_209.html

    分享給朋友:

    相關文章

    從100萬個搜索中結果,得出16個SEO優化的核心影響因素

    從100萬個搜索中結果,得出16個SEO優化的核心影響因素

    盡管這篇文章剖析的是google,可是很多關于其他查找引擎也同樣受用,不得不說的是在查找技術上baidu與google的距離還是很遠,可能方向都放到賺錢去了吧,OK,讓咱們開端吧!咱們剖析了100萬個查找成果(SERP)來回的一下這個問題:...

    信息流廣告崛起自媒體時代互聯網營銷新玩法層出不窮

    信息流廣告崛起自媒體時代互聯網營銷新玩法層出不窮

    目前,信息流廣告已經覆蓋絕大多數網民朋友,信息流廣告基本是基于移動互聯網終端的,最簡單直觀地信息流廣告出現在各大門戶網站的移動APP中,如騰訊新聞、天天快報、今日頭條、百度新聞、網易新聞、搜狐新聞、一點資訊等等移動資訊APP。根據國內知名數...

    摩拜ofo爭相進行新一輪融資 傳金額高達數億美元

    同享單車再次掀起融資競賽。騰訊科技從多個權威消息源獲悉,摩拜單車、ofo都在進行新一輪的融資,并且金額都到達數億美元。6月12日,一位接近摩拜單車高層的人士向騰訊科技透露,摩拜單車很快將宣告E輪融資。而此前據外媒《The informati...

    MySQL升級5.6 SQL變慢調優案例

    MySQL升級5.6 SQL變慢調優案例

    背景:某業務DB從5.5升級5.6后,同一sql執行時間由毫秒級飆升到了20秒,sql文本如下select * from big_table as t where ( ...

    【FT12短網址】事件代理:模式 or 反模式?

    前言終于熬過四個月了,人都黑了一圈。8 月 4 號的早讀文章由 @ 文藺翻譯授權分享。正文從這開始~JavaScript 工具包(toolkit)和框架所做的大量工作,都集中于嘗試修復、規范或優化瀏覽器的功能實現。此類工作需要做出許多假設,...

    小米發布智能音箱,欲打造成下一個小米手機?

    亞馬遜的echo智能音箱,天貓精靈音箱等等相繼發布。巨頭們爭相進入智能音箱領域,小米發布智能音箱也在大家預料中。2017年7月26日,小米探究實驗室發布售價299元的小米AI音箱“小愛同學“,8月7日-8月11日小米電視在全國13個城市舉辦...

    發表評論

    訪客

    ◎歡迎參與討論,請在這里發表您的看法和觀點。
    一本色综合网久久
    1. <tr id="33chb"><label id="33chb"></label></tr>
    2. <pre id="33chb"></pre>