网站被QQ拦截了怎么办?(2022域名防红代码新思路)

作为微网站搭建和开发者,是不是经常发现自己的域名被QQ或者微信拦截,以前网上也有很多比如跳转,炮灰域名这样的办法来做防红处理,不过效果也不是特别理想。偶然的机会让我了解到了腾讯SCF这个服务,于是产生了一个用腾讯自身的服务来防止域名变红的方法并且进行了测试。

1.png

什么是腾讯SCF?

无服务器云函数(Serverless Cloud Function)是腾讯云提供的无服务器(serverless)执行环境,您无需购买和管理服务器,而只需使用平台支持的语言编写核心代码并设置代码运行的条件,代码即可在腾讯云基础设施上弹性、安全地运行。本实验带你使用 SCF,轻松生成缩略图。防红步骤开始

首先我们需要注册一个腾讯云的账号,然后我们登录到后台,点击新建应用。

2.png

一、未拦截网站处理方法

我们选择应用市场>快速部署一个Website静态网站,然后就无脑下一步,等待部署完成。我们在函数服务里,找到我们的应用(如果没有找到,则需要关注一下区域是不是选错了),进来之后,我们点击函数管理,观察了一下代码,发现其实这里很简单。比方说,这里的路由就是简单的通过sendFile来引用文件.

3.png

app.get(`/`, (req, res) => {
  res.sendFile(path.join(__dirname, 'index.html'))
})
然后我们把静态页面写到blog/index.html里就可以展示了,这是一种方式可以做跳转

但是,这样一个一个静态页面写起来也太费劲了!所以我们看看能不能尝试接收变量,这里我们看到下面的一个样例,访问/user/时,如果后面带一个变量,比如/user/1234,这里会将其捕获到:id传入

app.get('/user/:id', (req, res) => {
  const id = req.params.id
  res.send({
    id: id,
    title: 'serverless framework',
    link: 'https://serverless.com'
  })
})
通过这种方式,我们思考到是不是可以通过输入文章id,我们做一个跳转匹配到博客呢?

app.get(`/blog/:article`, (req, res) => {
  const article = req.params.article
  res.redirect('https://www.xxx.com/sec/pig=' + article)
})

上面的代码,就代表我们如果访问/blog/ 后面带文章id,比如/home/12345,则会跳转www.xxx.com/sec/pig=123456。


二、已拦截网站处理方法
这其实就已经实现了一个简单的跳转了,但是如果像我们现在这种情况,链接已经被拦截了,跳转也会被拦截,因此我们需要做一个判断,在QQ客户端内,页面引导用户打开浏览器,像这样,我们在刚才的基础上尝试先获取用户的user-agent,为了方便判断,我们这里把他转成小写的
const deviceAgent = req.headers['user-agent'].toLowerCase();

user-agent如果包含qq则代表是在qq客户端里的,因此我们这么写
const deviceAgent = req.headers['user-agent'].toLowerCase();
const agentID = deviceAgent.match(/(qq)/);

如果能判断到客户端的环境,我们想输出不同页面,应该如何操作呢?只需要加上判断就好了

const deviceAgent = req.headers['user-agent'].toLowerCase();
const agentID = deviceAgent.match(/(qq)/);
if (agentID) {
      res.send('您的环境现在处于QQ客户端')
    } else {
      res.sned('您的环境现在处于非QQ客户端')
    }

那么处于客户端的,我们让他加载刚才的打开浏览器页面,不是客户端的让他自动跳转我们博客的地址,则完整的是下面这样:

app.get(`/blog/:article`, (req, res) => {
  const article = req.params.article
    const deviceAgent = req.headers['user-agent'].toLowerCase();
    const agentID = deviceAgent.match(/(qq)/);
    if (agentID) {
      res.send('<!DOCTYPE html><html><head><title>请在浏览器中打开</title>  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">    <style>    body{background-color:#333;}    img{width:100%;}  </style></head><body><img src="https://www.xxxx.com/demo/open_in_browser.png" /></body>')
    } else {
      res.redirect('https://www.xxxx.com/sec/pig=' + article)
    }
})

res.send可以直接输出html代码,res.redirect则用于跳转,当然,我们刚才的那张图片有人发现,上面是打开safari浏览器。


三、如何给安卓提示打开手机浏览器,并且更换图标呢


我们只需要重新p一张图,然后在修改一下刚才的逻辑就好了
4.png

最核心的就是我们在判断完在QQ端里,我们再判断一下是不是苹果手机。


相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(1)

Thanks for finally writing about >网站被QQ拦截了怎么办?(2022域名防红代码新思路) <Liked it!
游客 2个月前 (2024-01-18) 回复