需求背景
一个标准的企业级网站通常会有 PC 端(www.xxx.com)和移动端(m.xxx.com)两个域名,同时需要确保全站使用 HTTPS 协议。我们需要实现:
- 无论用户访问的是 HTTP 还是 HTTPS 协议,最终都强制跳转到 HTTPS。
- PC 端访问 www 域名保持不变,移动端访问 www 域名自动跳转到 m 域名。
- 已在 m 域名下的访问不做任何跳转,非 www 开头的域名也不处理。
执行时机
建议将该函数放在页面标签内尽早执行,最好在其他脚本加载前完成跳转,避免页面无效渲染。
代码实现
// 封装成独立函数,提高可读性和复用性
function redirectToHttpsAndMobile() {
// 1. 定义常量,便于维护
const TARGET_PROTOCOL = "https:";
const MOBILE_DOMAIN_PREFIX = "m.";
const PC_DOMAIN_PREFIX = "www.";
// 移动端设备检测正则(覆盖主流移动端)
const MOBILE_REGEX = /windows mobile|android|ucweb|iphone|ipad|ipod|mqqbrowser|harmony|miui|vivo|oppo/i;
// 第一步:强制 HTTPS 协议(仅在非 HTTPS 时执行)
if (window.location.protocol !== TARGET_PROTOCOL) {
// 拼接 HTTPS URL(避免直接拼接出错)
const httpsUrl = `${TARGET_PROTOCOL}//${window.location.host}${window.location.pathname}${window.location.search}`;
..(httpsUrl);
;
}
currentHost = ..;
(currentHost.() || !currentHost.()) {
;
}
mobileHost = currentHost.(, );
mobileUrl = ...(currentHost, mobileHost);
isMobile = .(navigator..());
(isMobile) {
..(mobileUrl);
}
}
();


