SW-X的短网址常用操作,依赖\x\built\ShortUrl
组件。
依赖组件:Redis
连接池
依赖类:\x\built\ShortUrl
方法名:set()
返回值:string
,返回短链接标识符
参数:
string $url
int $outtime
2678400
秒,[31天]string $redis_key
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\Http
的redirect()
方法进行重定向。
但这个方法有个弊端,就是SW-X的路由并没有参数别名支持,只能使用类型这种:
https://u.sw-x.cn?i=CODE
的方式来接收标识符,再进行读取重定向,看起来不太美观。
第2种:
原生PHP基于Redis读取,可以实现这样的路由读取方式:
https://u.sw-x.cn/CODE
$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;
}