国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

短網址探究

2019-11-15 02:05:23
字體:
來源:轉載
供稿:網友
短網址探究引言

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

  http://dwz.cn/CSW6Y=>http://www.survivalescaperooms.com/iforever/p/4313704.html,

  http://dwz.cn/CSWuP=>http://www.survivalescaperooms.com/iforever/p/4279006.html ,等等

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

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

原理

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

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

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

注意

  從短鏈接到長連接,還需要配置下rewrite,這樣可以最大限度的減少長度,省去類似index.php?url=這樣的字符串,而直接是http://dwz.cn/SDGHSi這樣的格式,url重寫配置很簡單,我用的是新浪云測試的,下面是配置的rewrite規則

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

  handle:后面的就是rewrite規則,新浪云的具體的詳細規則到這里看http://sae.sina.com.cn/doc/php/runtime.html#php-app-config,很簡單,nginx、apache的配置也類似。

  重定向完成之后還有一個要注意的地方就是在傳遞參數的時候要進行urlencode,重定向之前要用urldecode。在未使用urlencode的時候傳遞url類型的參數,在獲取的時候可能丟掉部分信息,因此在生成短鏈接之前傳遞參數的時候要將url進行escape處理,將特殊字符串進行編碼,在訪問短鏈接處理的時候需要對編碼的url進行urldecode處理,還原成正常的鏈接,否則在header跳轉的時候不會把該鏈接當成一個正常的url,跳轉之后會把該url附加的之前頁面的主機后面類似http://abit.sinaapp.com/www.survivalescaperooms.com,可能會出現錯誤,因此,這里要特別注意。

  sae的在重定向的時候會有一個問題,會將雙反斜線自動過濾為一個,例如從http://abit.sinaapp.com/到http:/abit.sinaapp.com/,注意,這里少了個反斜線,這在處理的時候要特別注意,不然可能會遇到不必要的麻煩。

編碼

  主要的處理部分

<?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://abit.sinaapp.com/有興趣的可以試試

  本文版權歸作者iforever(luluyrt@163.com)所有,未經作者本人同意禁止任何形式的轉載,轉載文章之后必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利。


上一篇:引用

下一篇:預定義變量

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江阴市| 涿鹿县| 巢湖市| 朝阳县| 榆树市| 丽江市| 宁城县| 丹东市| 兖州市| 五原县| 丰镇市| 石城县| 辰溪县| 广河县| 西贡区| 贡山| 鄂尔多斯市| 遵化市| 维西| 蓝山县| 哈尔滨市| 乌拉特后旗| 日土县| 正宁县| 贵港市| 庆云县| 镇原县| 剑河县| 浮山县| 北安市| 星子县| 麻城市| 湖南省| 赤水市| 罗江县| 右玉县| 广州市| 罗江县| 长寿区| 五原县| 长春市|