数据库 - Model 前置说明
官方开源项目 抓取代理IP

介绍

SW-X的短网址常用操作,依赖\x\built\ShortUrl组件。

生成短网址

依赖组件:Redis连接池
依赖类:\x\built\ShortUrl
方法名:set()
返回值:string,返回短链接标识符

参数:

  • string $url

    • 功能:原网址
    • 默认值:无
  • int $outtime

    • 功能:过期时间
    • 默认值2678400秒,[31天]
  • string $redis_key

    • 功能:Redis自增器名称
    • 默认值swx_shorturl_inc

使用示例:

\x\built\ShortUrl::set('https://www.sw-x.cn');

返回示例:

WRXTY1

使用短链接标识符,换取原网址

依赖组件:Redis连接池
依赖类:\x\built\ShortUrl
方法名:get()
返回值:读取失败返回false,成功返回原网址

参数:

  • string $code

    • 默认值:无

使用示例:

\x\built\ShortUrl::get('WRXTY1');

返回示例:

https://www.sw-x.cn

读取后的重定向方案

第1种:
如果是在SW-X框架中,使用\x\built\ShortUrl::get()方法读取原网址的话,就可以直接使用\x\controller\Httpredirect()方法进行重定向。
但这个方法有个弊端,就是SW-X的路由并没有参数别名支持,只能使用类型这种:

https://u.sw-x.cn?i=CODE
的方式来接收标识符,再进行读取重定向,看起来不太美观。


第2种:
原生PHP基于Redis读取,可以实现这样的路由读取方式:

https://u.sw-x.cn/CODE

但需要配置Nginx跟编写FPM-PHP的代码。

PHP代码如下:

$code = ltrim($_SERVER['QUERY_STRING'], '/');
if (empty($code)) exit;

// 这个是SW-X中Redis连接池的前缀
$redis_prefix = 'swx_';
try {
    // 使用Redis查询
    $redis = new \Redis(); 
    $redis->connect('127.0.0.1', '6379', 10);
    $redis->auth('root');
    $url = $redis->get($redis_prefix.$code);
}catch (\RedisException $e) { 
    $err = array(
        'code' => $e->getCode(), 
        'msg'  => $e->getMessage(), 
        'file'    => $e->getFile(), 
        'line'   => $e->getLine() 
    );
    var_dump($err);
    exit; 
}

// 默认地址
if (!$url) $url = 'https://www.sw-x.cn';
// 重定向
header("HTTP/1.1 301 Moved Permanently");
header("Location: ".$url);
exit;

Nginx部分配置如下:

location / {
    if (!-e $request_filename) {
        rewrite  ^(.*)$ /index.php?s=/$1  last;
        break;
    }
    index index.php index.html;
}

SW-X

企业级 - 高性能 PHP 框架

最后更新:3年前 . 作者-小黄牛

本篇目录