laravel路由 实现短连接生成及跳转(php 301重定向)
Posted 叫我超人先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel路由 实现短连接生成及跳转(php 301重定向)相关的知识,希望对你有一定的参考价值。
最近懒癌犯了,本来早想做的事拖了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重定向)的主要内容,如果未能解决你的问题,请参考以下文章