短链接形如
6sk.cc/XYZ
后台配置访问这个短链域名:
跳转真实长链接https://xxx.com/product/info/123?uid=123&uuid=456&token=123456
宝塔新建一个项目,只有一个index.php
文件,内容如下:域名直接指向。此种方法很容易被sql注入,改写成域名指向tp6下的一个方法。
<?php
$mysqli=new mysqli();
$queryString = str_replace('/', '', $_SERVER['QUERY_STRING']);
file_put_contents('6sk',$queryString."\n\r",FILE_APPEND);
if ($queryString) {
$mysqli->connect('rm-xxxx.mysql.rds.aliyuncs.com','rdsadmin','password','dbname');
$mysqli->set_charset("utf8");
$sql="select * from short_url where short_url = '$queryString'";
$rs = $mysqli->query($sql);
mysqli_close($mysqli);
while($row = mysqli_fetch_array($rs, MYSQLI_ASSOC)){
header("Location:" . $row['url']);
}
exit('短链接不存在');
} else {
exit('参数错误');
}
路由
// 6sk路由
Route::group('top6sk', function () use($version){
Route::get(':str', "{$version}.Top6sk/index")->pattern(['str' => '[\w\-]+']);
});
控制器
<?php
namespace app\api\controller\v1;
use think\facade\{Request,Db};
class Top6sk extends Base
{
public function initialize()
{
parent::initialize();
}
/**
* 短链域名跳转
* @return false|string
*/
public function index(Request $request)
{
$str = $request::param('str','');
if(empty($str))
return self::error(500,'参数错误');
$url = Db::name('short_url')->where(['short_url'=>$str])->value('url');
if(!empty($url)){
header("Location:" . $url);
}else{
return self::error(500,'短链接不存在');
}
}
}
nginx域名配置伪静态
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ https://www.xxx.com/api/top6sk$1 last;
break;
}
}
总结:当我们访问形如:
https://6sk.cc/O85WP2
时,会自动跳转后台设置的此短链对应的长链接地址。https://www.xxx.com/product/info/678?uid=12345&uuid=3435
.流程如下:
短链配置的项目目录和长链一样。都是/www/wwwroot/www.xxx.com,运行目录都是/public,只是域名不一样。
短链项目配置了nginx伪静态,当我们访问短链域名时,伪静态重写路由至https://www.xxx.com/api/top6sk项目的一个方法地址
短链后跟的6位唯一编码会在nginx重写后跟在项目路由配置参数str接收。查库然后跳转长链接。
/**
* 生成6位字符短链方法
*/
function short_url($url = ''){
$url = crc32($url);
$result = sprintf("%u", $url);
$show = '';
while($result > 0){
$s = $result % 62;
if ($s>35){
$s=chr($s+61);
}elseif($s > 9 && $s <= 35){
$s=chr($s+55);
}
$show .= $s;
$result = floor($result / 62);
}
return $show;
}
网友评论