JS 根据来路域名跳转不同网址问题

2017-06-18 02:13:40 +08:00
 lancn
想用 js 实现根据不同来路域名( 2 个)跳转到不同网址
通过 123.comwww.123.com 的来路跳转到 111.com
通过 456.comwww.456.com 的来路跳转到 222.com
楼主美工,代码不太懂,不知道该怎样搞,求大神指点,万分感谢!
9538 次点击
所在节点    程序员
52 条回复
lancn
2017-06-18 23:29:59 +08:00
感谢大家的热心回复,我会把方法卓个仔细试试,第一次在 V2EX 提问,氛围真是太棒了!
wkl17
2017-06-19 00:38:00 +08:00
@lilifenghao44 请问要怎么样获取到 cname 的来路域名?之前就隐隐约约感觉有这样的途径(如果真能实现,那就不需要在服务器上绑定新域名了,只要解析到别名就行,多爽。。。),但不知道具体是如何做的。
lilifenghao44
2017-06-19 08:57:23 +08:00
@Zohar 我只是补充#2 的, 假如 1.aaa.com cname 到 2.aaa.com, 在 httpd 中,收到的请求 host 依旧是 1.aaa.com.
当然用 A 记录也是可以.(当然知道请求头是客户端封装的.).
也说了重点是用 vhost 去区分 servername.
lilifenghao44
2017-06-19 09:01:17 +08:00
@aprikyblue 大家只是尽所能回复,不完整或者错误也是难免.
您若是明白,不如做个介绍和解释,给大家普及下知识.
如果否认能让您感觉有思想,或者功力深厚,那么恭喜你.
Tokin
2017-06-19 09:08:34 +08:00
@Chaidu 没有人质疑你,只是有人指出你代码存在潜在隐患,感觉你的回复可能有些过激了。
而且我觉得,单纯的提供可行却不一定可靠的方案有点不负责任。
如果老板让你开发一个功能,你实现了,但是却存在 [已知的安全隐患 BUG] 被同事指出,你能大声的告诉他你的代码“完美的达到了目的,解决了问题”吗?
我觉得我可能也有点过激了,非常抱歉。
Tokin
2017-06-19 09:10:30 +08:00
收回上面的回复,非常抱歉,我觉得我傻了- -,这里可能只是在讨论可行方案,安全问题并不是这个主题要考虑的,非常抱歉 @Chaidu
lilifenghao44
2017-06-19 09:13:30 +08:00
@wkl17 cname 和 A 记录其实没啥区别,除了不能配缺省.
楼主的跳转,已经有回复帖了 location 跳转代码.
不知道具体需求,看情况用 httpd 的 rewrite,vhost 或者代码里跳转吧.
meepo3927
2017-06-19 11:09:45 +08:00
@Tokin , 不用道歉吧, 他写的代码确实简陋,打眼一看就有问题.

@Chaidu 人家没有质疑你,而是指出了你代码的问题。你给楼主提供了思路,但是并没有“完美的达到了目的”。
Chaidu
2017-06-19 13:03:25 +08:00
@EXDestroyer #19 并不是 Bug,逻辑也并没有问题。也许你没明白我在 #18 所说,没关系,下面我再解释一下。
@Tokin #26 对的,就是这个意思。没事,大家共同探讨问题而已。
@meepo3927 #28 你真的完全理解题主的应用场景吗?注意,我说的是应用场景。他只是需要把两个域名的来路跳转到对应的两个页面上,仅此而已。对应他的使用场景,我给出的这段代码也许是最完美的。
另外,你都“打一眼看就有问题”,我会看不出来?第一,只是应用题主的场景而已。第二,#17 所构造的那个情况我在写那段代码之前就已经考虑到并立刻想到三种解决方法,只是没写出来。为什么不写出来?第一,我代码都给出来了,你解决#17 说的那种情况自己就可以解决啊,解决方法很多。第二,题主举例的那四个域名并不是生产环境的域名,解决方案里的参数自然就不同,我直接给出代码你测试完美,但是在生产环境由于域名长度不同,相应的每个解决方案的参数(截取字符串的长度、判断索引的位置。具体看下面的代码。)也不相同。
好吧,说话很简单,下面贴出代码(代码 2、代码 3 )。(由于 #17 的大神说不推荐用正则(虽然我并不知道为什么不推荐用正则),我就不写正则的方法了。)


班门弄斧,让大神们见笑了。
Chaidu
2017-06-19 13:08:07 +08:00
上图中的第 27 行 代码写错了,下面重新再贴一下代码。
aprikyblue
2017-06-19 14:07:31 +08:00
@lilifenghao44 #24
我也没什么恶意,
只是觉得这属于比较基础的内容,并不算什么高深内容,更遑论什么“有思想,或者功力深厚”,
而在这看到有说 CNAME 的实在不太理解,还不止一个人。
只是提醒一下如果有这个误区的再去了解关注一下这块知识。
因为看到上面的 @Zohar 已经解释得比较清楚了,所以我才没具体解释。
如果你想来探讨一下这个问题,随时欢迎。

如果我语言不是很恰当,对你造成了困扰,那我很抱歉。
实在看不爽,那我也没办法。拒绝撕逼,大家时间都很宝贵
EXDestroyer
2017-06-19 14:38:08 +08:00
@Chaidu 可是啊..两个域名的来路后面会带参数这是很常见的情况啊,如果直接使用 indexOf 怎么行呢,再怎么说你也不能说这是完美的解决方案吧
Chaidu
2017-06-19 14:49:35 +08:00
@EXDestroyer
第一、带参数≠带恶意参数。
第二,请先看帖,后回复。
#30 中的 “代码 3 ”就是完全用 indexOf 解决的,你能找出毛病吗?
EXDestroyer
2017-06-19 14:57:05 +08:00
@Chaidu 但是别人指出你最开始的代码不完美又有什么问题呢,讨论技术就是要尽可能的把各方面都考虑到
回复你的层主在一楼就已经给出了比较完善同时兼容性更好的方案,又没有人身攻击你,你搞得这么激动为何呢
EXDestroyer
2017-06-19 15:02:59 +08:00
@Chaidu 至于你的第三种写法,好像也不算完美吧
123.com?a=456.com
这样的 URL 就会跑到你的第二种条件去了,原则上应该在第一种条件
EXDestroyer
2017-06-19 15:04:14 +08:00
meepo3927
2017-06-19 15:16:54 +08:00
;(function (window, document, undefined) {
// config
var urlMap = {
'123.com': 'http://111.com',
'456.com': 'http://222.com'
};

var r = document.referrer;
if (!r) {
return;
}
// trip protocal
if (r.substr(0, 7) === 'http://') {
r = r.substr(7);
} else if (r.substr(0, 8) === 'https://') {
r = r.substr(8);
}

// parse domain
var domain = r.split('/')[0];
domain = domain.split('?')[0];

// match and jump
for (var i in urlMap) {
if (domain.indexOf(i) >= 0) {
window.location.replace(urlMap[i]);
return;
}
}

})(window, document);

-----------------------------------------
基于 @Chaidu 的加了一个 parse domain, 没严格测试,楼主可拿去参考。

欢迎拍砖. (我也是闲的蛋疼)
meepo3927
2017-06-19 15:23:42 +08:00
https://ooo.0o0.ooo/2017/06/19/59477b375152d.png
meepo3927
2017-06-19 15:29:19 +08:00
上图已挂,试试这个

w88975
2017-06-19 15:43:21 +08:00
为什么不直接用 window.location.host 呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/369234

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX