扫码关注官方订阅号
需求是这样的,用户访问a.com时将其重定向到b.com,同时不能让b.com通过referer检测到用户是从a.com过来的。请问大神这样的功能能否实现?
ringa_lee
思路就不对。不管你是PHP的重定向,Nginx的重定向,甚至前端JS的重定向。都无所谓。。。。。。 最后都是浏览器执行重定向的操作的。 Referer或者Origin之类的参数,是浏览器加上去的。要看具体浏览器的具体情景,不同的浏览器表现完全不一样(或者说,基本无法预测和控制)。
思路就不对。不管你是PHP的重定向,Nginx的重定向,甚至前端JS的重定向。都无所谓。。。。。。
最后都是浏览器执行重定向的操作的。
Referer或者Origin之类的参数,是浏览器加上去的。要看具体浏览器的具体情景,不同的浏览器表现完全不一样(或者说,基本无法预测和控制)。
Update:有看到一些其他的思路,不过都有局限,也没什么保证,可以参考http://segmentfault.com/q/1010000000123441
试试把a.com做成https
重定向的地址归根还是浏览器去执行了,楼主可以做个中转,a.com重定向到c.com,再重定向b.com
a.com
c.com
b.com
referer是浏览器发出的,不是nginx和php所能决定的
后台方案:通过proxy,对b.com做一个透明代理。前台方案:通过js,或者链接如果你是在某个网站比如A.com,有个链接点击之后进入b.com,然后要消除refer,把链接改成下面这样子:
<a rel="noreferrer" onclick="noreferclick(this);" href="b.com" target="_blank">xxx</a> function noreferclick(o){ var b,e,c,g,d,f,h;b=$(o);c=b.attr("href"); e="<html><head><meta http-equiv='Refresh' content='0; URL="+$("<p/>").text(c).html()+"' /></head><body></body></html>"; if($.browser.webkit){ b.attr("rel","noreferrer"); return true; } var userAgent = navigator.userAgent.toLowerCase(); if(userAgent.indexOf("firefox")!=-1){ if(b.attr("added")){ return true; } else{ h="data:text/html;charset=utf-8,"+encodeURIComponent(e); b.attr("added",1); b.attr("href",h); return true; } } else{ var a=b.attr("target")||"_self"; switch(a){ case "_self": case window.name: a=window; break; default: a=window.open(null,a); break; } a=a.document; a.clear(); a.write(e); a.close(); return false; } }
大部分浏览器适用。如果不是,比如c.com点击链接到a.com,然后转b.com,只有a.com是可控的。参考上面的点击操作做个js跳转。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
Update:
有看到一些其他的思路,不过都有局限,也没什么保证,可以参考
http://segmentfault.com/q/1010000000123441
试试把a.com做成https
重定向的地址归根还是浏览器去执行了,楼主可以做个中转,
a.com
重定向到c.com
,再重定向b.com
referer是浏览器发出的,不是nginx和php所能决定的
后台方案:通过proxy,对b.com做一个透明代理。
前台方案:通过js,或者链接
如果你是在某个网站比如A.com,有个链接点击之后进入b.com,然后要消除refer,把链接改成下面这样子:
大部分浏览器适用。
如果不是,比如c.com点击链接到a.com,然后转b.com,只有a.com是可控的。参考上面的点击操作做个js跳转。