因为公司的需求,需要发送推广链接到短信,一开始都是调用别人的链接,后面发现经常有链接失效的情况,极其不稳定,后面索性改成自己的域名来弄。话不多说,上代码:

后端链接生成,我这里是thinkphp6框架:

<?php
namespace app\admin\controller;
use think\Controller;
use think\Validate;
use think\facade\Request;
use think\facade\Db;
use think\facade\Session;
use think\facade\View;//整个链接管理,增删改查的相关代码
class System extends Base
{     //用户id   protected $uid;    public function __construct(){$this->uid = session::get('userdata.users_id');}/*链接详情*/public function index(){//传入分页值$p = empty($_GET['page']) ? 1 : $_GET['page'];//每页显示条数$num = empty(Request::param('num')) ? 10 : Request::param('num');//查询题目类型 & 分页,总条数$count = Db::table('zdb_url')->count();$info = Db::table('zdb_url')->paginate($num,$count);return view('system',[          'p' => $p, //显示第几页'num' => $num,  //每页显示条数             'page' => $info->render(),  // 获取分页显示      'pageshow' => pageShow($count,$num,$p), //总记录数,每页显示条数'info' => $info //将查询结果赋值给info]);   }        /*添加链接详情*/public function addSystem(){if(Request::param('html') == false){$info = Request::param(); //接收值 //数据验证     $validate = new Validate;$validate->rule([               'ur_link|链接' => 'require|unique:zdb_url','ur_info|备注' => 'require' ]);          if(!$validate->check($info)){//打印错误规则,并返回页面           return json(['info'=>$validate->getError(),'status'=>0]); }//重点 编码生成$key_str = "abcdefghijklmnopqrstuvwxyz1234567890";$ur_code = substr(str_shuffle($key_str),mt_rand(0,strlen($key_str)-11),4);$data = ['ur_code' => $ur_code,'ur_link' => $info['ur_link'],'ur_info' => $info['ur_info'],'ur_time' => time()];$result = Db::table('zdb_url')->insert($data); //插入数据if($result){        addLog($this->uid,'链接详情'.$info['ur_link']);     return json(['info'=>'添加成功!','status'=>1]);           }else{return json(['info'=>'添加失败!','status'=>0]);  }}else{          return view('addSystem');}}/**编辑链接详情*/public function editSystem(){       if(Request::param('html') == false){$info = Request::param(); //接收值            //数据验证     $validate = new Validate;$validate->rule(['ur_link|链接' => 'require','ur_info|备注' => 'require']);          if(!$validate->check($info)){//打印错误规则,并返回页面return json(['info'=>$validate->getError(),'status'=>0]); }$data = ['ur_link' => $info['ur_link'],'ur_info' => $info['ur_info']];$result = Db::table('zdb_url')->where('ur_id',$info['ur_id'])->update($data); if($result > 0){                         addLog($this->uid,'编辑ID为'.$info['ur_id'].'的链接详情');     return json(['info'=>'编辑成功!','status'=>1]);}elseif($result === 0){return json(['info'=>'你没有做任何修改哟!','status'=>0]);              }else{return json(['info'=>'编辑失败!','status'=>0]);  }}else{$data = Db::table('zdb_url')->where('ur_id',Request::param('id'))->find();return view('editSystem',['data' => $data,]);                         }}/*删除链接详情*/public function delSystem(){//单个删除还是批量删除if(Request::param('all') == '1'){$id = Request::param('id'); //接收id值$result = Db::table('zdb_url')->where('im_id',$id)->delete();if($result){Db::query('alter table `zdb_url` AUTO_INCREMENT = 1'); //重定义自增字段 addLog($this->uid,'删除ID为'.$id.'链接详情');     return json(['info'=>'删除成功!','status'=>1]);}else{return json(['info'=>'删除失败!','status'=>0]);}}else{//批量删除$id = Request::param('id/a'); //接收id值   if($id == ''){return json(['info'=>'请选择要删除的数据!','status'=>0]);}if(is_array($id)){//判断id是数组还是一个数值$ids = implode(',',$id);    $arr[] = ['im_id','in',$ids];  }else{  $arr[] = ['im_id','=',$id];  }            $list = Db::table('zdb_url')->where($arr)->delete();     if($list !== false){          Db::query('alter table `zdb_url` AUTO_INCREMENT = 1'); //重定义自增字段addLog($this->uid,'删除ID为'.implode(',',$id).'的链接详情'); return json(['info'=>'成功删除'.$list.'条数据!','status'=>1]);       }else{return json(['info'=>'数据删除失败啦!','status'=>0]);}    }}}

后端界面:

前端访问时的代码:

<?php
header("Content-Type:text/html;charset=utf-8");
$key = $_GET['id'];
echo "<title>正在跳转...</title>";
if (trim(empty($key))) {//没有后缀的时候直接跳到官网首页header("Location:http://your.site.com");//echo "链接不存在1";
}else{//@parameter 数据库地址,用户名,密码,所连接的数据库$link = mysqli_connect("127.0.0.1","root","123456","your_table");//连接错误时的信息if(mysqli_connect_error($link)){    exit(mysqli_connect_error());}//设置字符编码    mysqli_set_charset($link,"set names utf8");//查询数据库,通过KEY获取长链接进行跳转$sql = "SELECT ur_link FROM `zdb_url` WHERE `ur_code` = '$key'";//如果存在,则解析出长链接并跳转if($result = mysqli_query($link,$sql)){while($obj = mysqli_fetch_object($result)){//echo $obj->ur_link."<br>";header("Location:".$obj->ur_link);}// 释放结果集合mysqli_free_result($result);}else{echo "链接不存在2";}
}
//关闭连接
mysqli_close($link);?>

重点来了,我的是nginx,需要配置伪静态,我的环境是宝塔面板:

rewrite ^/(.*)$ /index.php?id=$1 last; 

如果是apache环境的话就在根目录下 .htaccess 文件中添加

#Apache规则:

RewriteRule ^/(.*)$ /index.php?url=$1 [L]

php 自定义生成短链工具相关推荐

  1. [开源]C#二维码生成解析工具,可添加自定义Logo

    原文:[开源]C#二维码生成解析工具,可添加自定义Logo 二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Co ...

  2. Web自定义表单工具和协同办公系统之集成(1)

    提起"协同办公",随便在百度或者Google搜索一下,就能让你看到眼花缭乱的信息,国内的各大协同办公软件厂商都在鼓吹着自己对协同的理解和自己的协同办公软件产品如何能实现协同办公管理 ...

  3. 浅谈eform自定义表单工具和协同办公系统

    浅谈eform自定义表单工具和协同办公系统 提起"协同办公",随便在百度或者Google搜索一下,就能让你看到眼花缭乱的信息,国内的各大协同办公软件厂商都在鼓吹着自己对协同的理解和 ...

  4. vs2017 自定义生成规则 错误 MSB3721 命令 ”已退出,返回代码为 1。

    错误 MSB3721 命令 "已退出,返回代码为 1. 解决办法:去掉yasm复选框,改为masm vs2017 自定义生成规则-编译汇编代码 VC++调用yasm编译汇编代码有三种方法:C ...

  5. 小程序源码:炫酷手持滚动弹幕生成小工具微信小程序-多玩法安装简单

    这是一款滚动弹幕生成微信小程序源码 让弹幕文字在手机屏幕上跑起来,LED弹幕 手机弹幕,告白神奇,等 支持多种模板,每一种模板都支持自定义颜色等等 字体跳动,字体表白等等 另外用户也可以支持自定义文字 ...

  6. 小程序源码:炫酷手持滚动弹幕生成小工具

    这是一款滚动弹幕生成微信小程序源码 让弹幕文字在手机屏幕上跑起来,LED弹幕 手机弹幕,告白神奇,等 支持多种模板,每一种模板都支持自定义颜色等等 字体跳动,字体表白等等 另外用户也可以支持自定义文字 ...

  7. 微信小程序-炫酷手持滚动弹幕生成小工具

    微信小程序-炫酷手持滚动弹幕生成小工具 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇 ...

  8. 【小程序源码】手持滚动弹幕生成小工具多样化模板

    这是一款滚动弹幕生成微信小程序源码 让弹幕文字在手机屏幕上跑起来,LED弹幕 手机弹幕,告白神奇,等 支持多种模板,每一种模板都支持自定义颜色等等 字体跳动,字体表白等等 另外用户也可以支持自定义文字 ...

  9. 微信小程序:炫酷手持滚动弹幕生成小工具

    这是一款滚动弹幕生成微信小程序源码 让弹幕文字在手机屏幕上跑起来,LED弹幕 手机弹幕,告白神奇,等 支持多种模板,每一种模板都支持自定义颜色等等 字体跳动,字体表白等等 另外用户也可以支持自定义文字 ...

最新文章

  1. 成为技术领导者——解决问题的有机方法
  2. 深入浅出SQL Server中的死锁
  3. StaticLinkList
  4. 78万奖金!天池最新CV大赛来了
  5. idea The origin server did not find a current representation for the target resource or is not willi
  6. gcc 4.4.2 安装
  7. “约见”面试官系列之常见面试题之第八十九篇之vue生命周期作用(建议收藏)
  8. 软件工程导论 01章软件工程学概述
  9. 成都Uber优步司机奖励政策(1月16日)
  10. XX 公司网络信息系统的安全方案设计书
  11. 【软工】week3-个人阅读作业-软件案例分析
  12. java如何美化按钮_css美化button按钮
  13. pip更改为豆瓣源以及源信任问题
  14. excel组合汇总_Excel汇总20151102
  15. 企业上云是什么意思?企业上云的好处是什么?
  16. DBeaver21.1.5如何迁移已有数据库连接
  17. [转载]Z-stack 应用程序编程接口(API)-网络层
  18. loadrunner 12 --录制手机app脚本
  19. 教你如何安慰失戀人?
  20. 用1元钱买到原价万元的电脑是什么体验?

热门文章

  1. 基于百度api接口的车辆识别计费系统
  2. python视频图片识别算法_python利用Opencv进行人脸识别(视频流+图片)
  3. 10路智能电动自行车充电桩功能特点优势
  4. css画心形原理,CSS画心形的三种方法
  5. cad和html5哪个好,最好用的5个CAD软件 你用的是哪款呢
  6. 木兰词·拟古决绝词柬友(引用)
  7. 解决web系统session劫持
  8. OpenCV基础知识
  9. uniapp-商品详情配置
  10. 阿里云服务器共享型、计算型和通用型有什么区别?