node.js 代码实现301跳转
之前专门有一篇博客介绍 nginx 设置不带www域名跳转带www域名上
为什么要这要做,可以从上面的博客得知原因.
后来还有一篇是介绍关于主域在搜索引擎中权重更高 ,
所以博客经过一段时间不带www域名跳转带www域名后,又相反的从带www跳转到不带www域名,只是因为主域权重更高,不想分流而已.
再后来还做了一件事,就是伪静态化,所以在我的博客就算翻页你也会看到url 是这样的 http://yijiebuyi.com/2.html
但是会出现一个问题,之前被搜索引擎收录的url跳转过来服务器找不到自然会报错.
所以博客的路由做了调整,兼容之前的老路由,同时支持新路由.
这样又导致一个问题,
就是一篇博客对应2个url,搜索引擎可能会全部抓取,最后更重要的是,搜索引擎对比内容发现一模一样,导致内容降权,自然不会有什么好的排名,这是最悲剧的,就是自己和自己的内容竞争,手足相残!
所以有了这篇,今天和大家介绍的是 node.js 实现代码级 301跳转,让2套路由统一,避免分权.
为什么要做301跳转? 这是搜索引擎认为最恰到的跳转,其他跳转搜索引擎会认为作弊嫌疑,具体内容请 google ,不会翻墙的请点击使用免费vpn
在博客启动页加一个方法:
app.get('/*', function(req, res, next) { if (req.url.length > 5 && req.url.indexOf('.html')<0) { url = ['http://', req.headers.host, req.url, '.html'].join(''); res.redirect(301, url); } else next(); });
这个方法类似一个过滤器,所有的url 请求都会被此方法过滤.
req.url.length > 5 这一句是为了避免拦截首页 这里的req.url=='/'
req.url.indexOf('.html')<0 此处判断链接是否包含有 .html 没有的话,就加上.html 然后进行 301跳转.
如果url已经包含有 .html 那么过滤器自动放行 next() 将会定位到指定的url 然后返回对应的html页面.
上面的方法同样适用于带www 和不带www 的 301跳转,稍做改动即可:
带www域名跳转到不带www域名:
app.get('/*', function (req, res, next) { var haswww = req.headers.host.match(/^www\./) , url = ['http://', req.headers.host.slice(4), req.url].join(''); haswww ? res.redirect(301, url) : next(); });
不带www域名跳转到带www域名:
app.get('/*', function (req, res, next) { var haswww = req.headers.host.match(/^www\./) , url = ['http://www.', req.headers.host, req.url].join(''); haswww ? next() : res.redirect(301, url); });