- 短信里面通常会带上各种活动链接,然后用户点开链接可以打开浏览器到活动页面。
短链接转换成长链接
- 把短链接复制到浏览器打开,发现跳转之后立马就换了个地址
// 原地址
https://u.10010.cn/qAPZU
// 目标地址
'https://m.client.10010.com/mobileService/clickCountLogRecord/pageClickCount.htm?flag=new&title=礼包&openUrl=https://m.client.10010.com/myPrizeForActivity/tenth517/homePage&duanlianjieabc=qAPZU'
- 短链接跳转长链接,通过 302 临时重定向即可完成
- 浏览器先向 u.10010.cn/qAPZU 地址发送 GET 请求。
- 根据参数 qAPZU 去查找数据库,找到对应的活动的真实链接。
- 后端返回了 302 重定向,并且指定了目标地址。
- 浏览器跳转到目标地址。
node代码实现
const http = require('http')
const server = http.createServer()
// 这里存放所有的短链和长链的对应关系
const urlMap = {
'qAPZU': 'https://m.client.10010.com/mobileService/clickCountLogRecord/pageClickCount.htm?flag=new&title=礼包&openUrl=https://m.client.10010.com/myPrizeForActivity/tenth517/homePage&duanlianjieabc=qAPZU'
}
server.on('request', function (req, res) {
const pathname = req.url.slice(1)
const taretUrl = urlMap[pathname]
console.log(taretUrl)
if (taretUrl) {
// 通过响应头来实现服务端重定向
res.writeHead(302, {
'Location': encodeURI(taretUrl)
})
res.end()
} else {
res.end('404')
}
})
server.listen(3000, function () { console.log('启用成功'); })
-
实现长地址和短地址的对应关系
- 首先需要确保每次生成的短地址都是唯一的
- 将地址转换成62进制
- 比如 u.10010.cn/999 这样的形式,而是把 999 转换为 62 进制表示,比如 u.10010.cn/g7