feat: 外链拦截放行 rainnya.asia 家族域名(含子域名直接跳转不走确认页)

This commit is contained in:
2026-08-12 22:33:13 +08:00
parent 2cf6368abf
commit 63b89071e3
2 changed files with 19 additions and 2 deletions
+15 -1
View File
@@ -8,7 +8,11 @@ export function safeOutUrl(url) {
const u = String(url || '').trim();
if (!u) return '#';
if (u.startsWith('/')) return u; // 站内绝对/相对路径(含 /uploads、/out 本身)
if (/^https?:\/\//i.test(u)) return '/out?url=' + encodeURIComponent(u);
if (/^https?:\/\//i.test(u)) {
// 本站家族域名(rainnya.asia 及子域名)直接跳转,不走确认页
if (isFamilyDomain(u)) return u;
return '/out?url=' + encodeURIComponent(u);
}
console.warn('[outlink] 不支持的链接协议,已拦截:', u);
return '#';
}
@@ -18,6 +22,16 @@ export function isInternalUrl(url) {
return String(url || '').startsWith('/');
}
/** 本站家族域名:rainnya.asia 及所有子域名(www.rainnya.asia / rainid.rainnya.asia 等)视为站内,直接跳转不走确认页 */
export function isFamilyDomain(url) {
try {
const hostname = new URL(url).hostname.toLowerCase();
return hostname === 'rainnya.asia' || hostname.endsWith('.rainnya.asia');
} catch {
return false;
}
}
/**
* footer_columnsJSON 字符串)解析为 [{ title, links: [{ label, url }] }]
* 解析失败或非数组返回 [](前端回退硬编码栏目)。