[运维]让301、302转向携带referrer

需求:一般的,我们使用301、302转向是为了转到其他域名,但是这样的转向是没有referrer的,假如说https://www.example.com、https://m.example.com会转向到https://example.com,但是此时https://example.com没有referrer。有时我们为了做统计,想知道用户是通过哪个网址来到的https://example.com,便有了此需求。

环境:

OS: Linux centos 3.10.0-693.2.2.el7.x86_64

Server version: Apache/2.4.37 (Unix)

解决方案:事实上,因为301并不能携带referrer,此时转向就不再适用。有些同学试图在apache的设置里增加refresh响应头(referrer将在页面加载完毕执行)。但当用户访问的并非首页时,这会让设置refresh变得颇为复杂,所以我们可以不在apache上做转发设置。通过apache把所有要跳转的域名指向同一个web目录,此目录下只有一个index.html文件,并且把404也指向index.html。我们在这个文档里写关于控制跳转的JavaScript脚本(原本控制跳转是由apache控制的),这样跳转后,就会携带referrer了,另外这个博文的标题是骗你的。

let domain=document.domain;
switch(domain){
    case "6sgc.love":
    case "www.6sgc.love":
    location.href="https://lgbti.top/site-6sgc"+GetUrlRelativePath();
    break;
    default:location.href="https://lgbti.top"+GetUrlRelativePath();
}
function GetUrlRelativePath()
{
    var url = document.location.toString();
    var arrUrl = url.split("//");
    var start = arrUrl[1].indexOf("/");
    var relUrl = arrUrl[1].substring(start);
    if(relUrl.indexOf("?") != -1){
        relUrl = relUrl.split("?")[0];
    }
    return relUrl;
}

在这个脚本里首先获取域名,把域名放入switch内,决定最终跳转的域名走向,因为之前设置404页面也会访问这个页面执行此段代码,所以我们可以通过脚本内的GetUrlRelativePath()方法获取相对地址,补到新域名后面,最终完成和301、302转向相同的功能,并且携带refresh。

↓↓↓↓↓↓↓例子↓↓↓↓↓↓

[运维]让301、302转向携带referrer_第1张图片

[运维]让301、302转向携带referrer_第2张图片

[运维]让301、302转向携带referrer_第3张图片

本文发布在CSDN

你可能感兴趣的:(Linux,WebAPI)