1. 程式人生 > >laravel路由 實現短連接生成及跳轉(php 301重定向)

laravel路由 實現短連接生成及跳轉(php 301重定向)

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重定向)