laravel路由 實現短連接生成及跳轉(php 301重定向)
阿新 • • 發佈:2018-05-08
AC ont pla 分享圖片 eve 生成 rst val mage
最近懶癌犯了,本來早想做的事拖了1個月。短連接這個之前工作中發送短信是用到過,一般大的網站都會有自己的短連接生成網站,我們公司也有。當然這次我是想在自己的服務器上弄。
短連接原理:將網站地址傳到mysql獲取自增的id,然後加密成字符串輸出到頁面。當調用短連接時,後端解密獲取實際的url地址,然後header函數做一個重定向跳轉(301)
我用了laravel框架,之前學過一點點好久沒用了,做點小東西,當做是復習。
路由配置:
1 Route::get(‘/showindex‘, function(){ 2 return view(‘index‘); 3 });//展示輸入框頁面路由 4 Route::get(‘/getUrl/{url?}‘, ‘UrlController@getUrl‘);//ajax插入 5 Route::get(‘/{url?}‘, ‘UrlController@rediectUrl‘);//跳轉路由
結合效果看吧
訪問地址為:http://58.87.108.192/showindex
前端代碼:(主要就是一個ajax,請求我的getUrl,獲取短連接)
1 $(‘a‘).click(function(event) { 2 var url = $(‘#urlInsert‘).val(); 3 var reg=new RegExp("/","g");4 5 url=url.replace(reg,‘&&&‘); 6 $.ajax({ 7 type:"get", 8 url:‘/getUrl/‘+url, 9 datatype: "html", 10 success:function(data){ 11 $(‘#urlShow‘).val(‘58.87.108.192/‘+data); 12 }, 13 error: function(){ 14 return;15 } 16 }); 17 });
後端代碼:
1.獲取短連接
1 //地址入庫,獲取自增id,返回加密字符串 2 public function getUrl($url= false){ 3 if ($url) { 4 $url = str_replace(‘&&&‘,‘/‘,$url); 5 $url = str_replace(array(‘https://‘, ‘http://‘),‘‘,$url); 6 $res = DB::table(‘url_tables‘)->where(‘url‘, $url)->first(); 7 if (!$res){ 8 return(base_convert(DB::table(‘url_tables‘)->insertGetId([‘url‘=>$url]),10,32)); 9 } else { 10 return(base_convert($res->id,10,32)); 11 } 12 } 13 return false; 14 }
2.短連接跳轉
1 //實現跳轉 2 public function rediectUrl($url=false) 3 { 4 $id = base_convert($url,32,10); 5 $res = DB::table(‘url_tables‘)->where(‘id‘, $id)->first(); 6 if($res && $url=$res->url){ 7 header("Location:http://".$url,TRUE,301); 8 exit; 9 }else{ 10 return view(‘welcome‘); 11 } 12 }
其實實現邏輯很簡單,核心的代碼就是 這一句
1 header("Location: http://www.baidu.com",TRUE,301);exit;
當然還有別的寫法:
1 header(‘HTTP/1.1 301 Moved Permanently‘); 2 header(‘Location: http://www.baidu.com‘); 3 exit;
註意一點,傳入的url可能帶有‘/‘特殊字符,我在前後端做了轉換。
laravel路由 實現短連接生成及跳轉(php 301重定向)