Przeglądaj źródła

域名前缀兼容www以外的前缀

fattiger 2 tygodni temu
rodzic
commit
0a8252ee49
2 zmienionych plików z 32 dodań i 11 usunięć
  1. 16 6
      public/js/load.m.js
  2. 16 5
      scripts/generate-sites.js

+ 16 - 6
public/js/load.m.js

@@ -885,18 +885,28 @@
     return settings;
   };
   const getSitePrefix = () => {
-    const hostname = window.location.hostname;
-    const parts = hostname.split('.');
-    if (parts[0] === "www") parts.shift();
-    return parts[0];
+    const hostname = (window.location.hostname || "").toLowerCase().replace(/\.$/, "");
+    const parts = hostname.split('.').filter(Boolean);
+    // 从主域名方向查找品牌键,使 www、m、app 或多级子域名都不影响品牌识别。
+    for (let i = parts.length - 1; i >= 0; i--) {
+      if (Object.prototype.hasOwnProperty.call(sites_config, parts[i])) return parts[i];
+    }
+    return parts[0] || "default";
   }
   const getSiteConfig = () => {
 	// 默认站点的配置键不是域名前缀,需要用完整域名显式映射。
 	const HOST_ALIAS = {
 	  "ukslot777.com": "default",
 	};
-    const host = window.location.hostname.replace(/^www\./, "");
-    let prefix = HOST_ALIAS[host] || getSitePrefix();
+    const host = (window.location.hostname || "").toLowerCase().replace(/\.$/, "");
+    let prefix = "";
+    for (const aliasHost in HOST_ALIAS) {
+      if (host === aliasHost || host.endsWith(`.${aliasHost}`)) {
+        prefix = HOST_ALIAS[aliasHost];
+        break;
+      }
+    }
+    if (!prefix) prefix = getSitePrefix();
     if (window.location.hostname.includes("localhost")) prefix = "default"  // 正式环境删除此行,使用 getSitePrefix() 返回值
     const conf = sites_config[prefix] || sites_config["default"];
     // 合并区域配置:site.region → regions[region] → 写回到 site.regionConfig

+ 16 - 5
scripts/generate-sites.js

@@ -133,7 +133,8 @@ function applyReplacements(template, map) {
 
 /**
  * 生成 host → folder 的 CloudFront Function(viewer-request,运行时 cloudfront-js-2.0)。
- * 逻辑对齐 load.m.js getSiteConfig():去 www → HOST_ALIAS → 否则取首段标签 → 校验 folder 是否存在 → 否则 default。
+ * 逻辑对齐 load.m.js getSiteConfig():匹配完整域名或任意子域名下的 HOST_ALIAS,
+ * 再从主域名方向查找品牌标签 → 校验 folder 是否存在 → 否则 default。
  * 仅改写「文档请求」("/"、扩展名为空的 SPA 路由、index.html);静态资源(带扩展名)保持原路径,从根目录回源。
  */
 function generateCloudFrontFn(folders, hostAlias) {
@@ -161,13 +162,23 @@ var HOST_ALIAS = ${aliasJson};
 
 function pickFolder(rawHost) {
   var host = (rawHost || "").toLowerCase();
-  if (host.startsWith("www.")) host = host.slice(4);
   var colon = host.indexOf(":");
   if (colon !== -1) host = host.slice(0, colon);
+  host = host.replace(/\\.$/, "");
 
-  // 首段标签对应 load.m.js 的 getSitePrefix();整域名例外走 HOST_ALIAS。
-  var folder = HOST_ALIAS[host] || host.split(".")[0];
-  return FOLDERS[folder] ? folder : "default";
+  // 别名同时匹配裸域名和任意层级子域名,例如 m.ukslot777.com。
+  for (var aliasHost in HOST_ALIAS) {
+    if (host === aliasHost || host.endsWith("." + aliasHost)) {
+      return FOLDERS[HOST_ALIAS[aliasHost]] === true ? HOST_ALIAS[aliasHost] : "default";
+    }
+  }
+
+  // 从主域名方向查找品牌标签,例如 app.m.blazingreels777.com → blazingreels777。
+  var parts = host.split(".");
+  for (var i = parts.length - 1; i >= 0; i--) {
+    if (FOLDERS[parts[i]] === true) return parts[i];
+  }
+  return "default";
 }
 
 // nginx merge_slashes:把路径里 2 个及以上连续的 / 压成 1 个(保留开头的单个 /)。