• 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可能带有'/'特殊字符,我在前后端做了转换。

  • 相关阅读:
    下载最新Silverlight 5 Beta客户端
    oracle数据库导入导出命令!
    使用SQL Server 2008提供的表分区向导
    Microsoft Visual Studio 2010 旗舰版下载地址
    用C#创建Windows服务(Windows Services)
    Socket通信:服务端发送安全策略到flash(c#)
    Microsoft Silverlight 4 Tools for Visual Studio 2010 下载地址
    Flex打印
    .NET中三种数据类型转换的区别:(type), type.Parse, Convert类
    JQUERY 常用方法大全
  • 原文地址:https://www.cnblogs.com/jwcrxs/p/9009631.html
Copyright © 2020-2023  润新知