美文网首页
短链域名nginx伪静态配置笔记!

短链域名nginx伪静态配置笔记!

作者: DragonersLi | 来源:发表于2021-07-14 13:25 被阅读0次

    短链接形如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;
        } 
    
    

    相关文章

      网友评论

          本文标题:短链域名nginx伪静态配置笔记!

          本文链接:https://www.haomeiwen.com/subject/kiqarxtx.html