feat: 外链拦截放行 rainnya.asia 家族域名(含子域名直接跳转不走确认页)
This commit is contained in:
@@ -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_columns(JSON 字符串)解析为 [{ title, links: [{ label, url }] }];
|
||||
* 解析失败或非数组返回 [](前端回退硬编码栏目)。
|
||||
|
||||
Reference in New Issue
Block a user