window.location='{$current_name}';"); exit(); } // 重置临时链接参数 if (!empty($_REQUEST["action"]) && $_REQUEST["action"] == "delUrlArgs") { $check_name = strip_tags($_REQUEST['check_name']); $dir = dirname(__FILE__) . '/args'; $files = glob($dir . '/' . $check_name . "_*.txt"); foreach ($files as $file) { if (preg_match('/_(\d{10})\.txt$/', $file, $m)) { unlink($file); } } header('Location: ' . $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?action=edit_config&name=' . urlencode($check_name)); exit; } // 确定当前配置上下文(供表单回显用) $isNewConfigDraft = false; $configCopySource = ''; $copyFrom = dash_sanitize_config_name($_REQUEST['copy_from'] ?? ''); if (!empty($_REQUEST["name"])) { $check_name = trim($_REQUEST["name"]); $config_name = str_replace(".php", "", $check_name); $config_file = "check_config/" . $config_name . "_config.php"; if (!file_exists($config_file)) { $isNewConfigDraft = true; $sourceFile = ($copyFrom !== '') ? "check_config/{$copyFrom}_config.php" : ''; if ($copyFrom !== '' && is_file($sourceFile)) { $config_file = $sourceFile; $configCopySource = $copyFrom; if ($check_name === 'new_config' || $check_name === '') { $check_name = dash_suggest_copy_config_name($copyFrom); } } else { $config_file = "check_config/index_config.php"; } } } else { $check_name = "index"; $config_file = "check_config/index_config.php"; } include($config_file); // 密码处理 if (!empty($_REQUEST['password'])) { $_SESSION['password'] = $_REQUEST['password']; $_SESSION["myaction"] = $_REQUEST['myaction']; } // 设置测试访问状态(写入完整 Session 判定缓存,便于测试广告落地链接直达真实页) if (!empty($_REQUEST["action"]) && $_REQUEST["action"] == "setuvi") { require_once __DIR__ . '/lib/Cloak/VisitorRepository.php'; if (!empty($_REQUEST["res"]) && $_REQUEST["res"] == "true") { cloak_session_mark_real_visitor(); } if (!empty($_REQUEST["res"]) && $_REQUEST["res"] == "false") { cloak_session_clear_real_visitor(); } echo(""); exit(); } // 保存配置 if (!empty($_REQUEST["action"]) && $_REQUEST["action"] == "submit") { $check_name = trim($_REQUEST["check_name"]); $methods = trim($_REQUEST["methods"]); $country_on = in_array(strtoupper(trim($_REQUEST['country_on'] ?? '')), ['ON']) ? 'ON' : 'OFF'; $country_raw = $country_on === 'ON' ? (string) ($_REQUEST['country'] ?? '') : ''; $country = $country_on === 'ON' ? CountryAllowlist::formatForConfig($country_raw) : ''; $blacklist_group_id = (int)($_REQUEST["blacklist_group_id"] ?? 0); $whitelist_group_id = (int)($_REQUEST["whitelist_group_id"] ?? 0); try { $pdoDash = new PDO( 'mysql:host=127.0.0.1;dbname=' . DB_NAME . ';charset=utf8mb4', DB_USERNAME, DB_PASSWORD, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] ); $chk = $pdoDash->prepare('SELECT 1 FROM ip_groups WHERE id = ? AND type = ? LIMIT 1'); if ($blacklist_group_id > 0) { $chk->execute([$blacklist_group_id, 'black']); if (!$chk->fetchColumn()) $blacklist_group_id = 0; } if ($whitelist_group_id > 0) { $chk->execute([$whitelist_group_id, 'white']); if (!$chk->fetchColumn()) $whitelist_group_id = 0; } } catch (Throwable $e) { $blacklist_group_id = $whitelist_group_id = 0; } $DB_fp = $_REQUEST["DB_fp"]; $DB_zp = trim($_REQUEST["DB_zp"]); $redirect_method = trim($_REQUEST["redirect_method"]); $show_content = trim($_REQUEST["show_content"]); $costm_ip_score = trim($_REQUEST["costm_ip_score"]); $write_log = trim($_REQUEST["write_log"]); $zh_on = trim($_REQUEST["zh_on"]); $os_on = trim($_REQUEST["os_on"]); $mobile_on = trim($_REQUEST["mobile_on"]); $v_referer = trim($_REQUEST["v_referer"]); $is_virtual = trim($_REQUEST["is_virtual"]); $auto_black = trim($_REQUEST["auto_black"]); $auto_black_times = trim($_REQUEST["auto_black_times"]); $white_params = trim($_REQUEST["white_params"]); $keep_params = trim($_REQUEST["keep_params"]); $iphone_model = $_REQUEST["iphone_model"]; $risk_number = $_REQUEST["risk_number"]; $risk_enhanced = in_array(strtoupper(trim($_REQUEST["risk_enhanced"] ?? '')), ['ON']) ? 'ON' : 'OFF'; $url_args_timeout = $_REQUEST["url_args_timeout"]; $debug_mode = in_array(strtoupper(trim($_REQUEST["debug_mode"] ?? '')), ['ON']) ? 'ON' : 'OFF'; $ad_fb = in_array(strtoupper(trim($_REQUEST["ad_fb"] ?? '')), ['ON']) ? 'ON' : 'OFF'; $ad_google = in_array(strtoupper(trim($_REQUEST["ad_google"] ?? '')), ['ON']) ? 'ON' : 'OFF'; $ad_tiktok = in_array(strtoupper(trim($_REQUEST["ad_tiktok"] ?? '')), ['ON']) ? 'ON' : 'OFF'; $ad_strict = in_array(strtoupper(trim($_REQUEST["ad_strict"] ?? '')), ['ON']) ? 'ON' : 'OFF'; $config_name_submit = str_replace('.php', '', $check_name); $existing_spm_id = ''; $existing_cfg = 'check_config/' . $config_name_submit . '_config.php'; if (file_exists($existing_cfg)) { $existing_raw = file_get_contents($existing_cfg); if (preg_match("/define\('CLOAK_AD_SPM_ID',\s*'([^']*)'\)/", $existing_raw, $spmM)) { $existing_spm_id = $spmM[1]; } } $ad_spm_id = CloakAdSourceGuard::isValidSpmId($existing_spm_id) ? $existing_spm_id : ''; if (($ad_fb === 'ON' || $ad_google === 'ON' || $ad_tiktok === 'ON') && $ad_spm_id === '') { $ad_spm_id = CloakAdSourceGuard::generateSpmId(); } if (strtoupper($auto_black) === 'ON' && $blacklist_group_id <= 0) { echo ""; exit(); } if ($country_on === 'ON' && $country === '') { echo ""; exit(); } if (!empty($methods)) { ConfigWriter::save($check_name, [ 'methods' => $methods, 'blacklist_group_id' => $blacklist_group_id, 'whitelist_group_id' => $whitelist_group_id, 'country' => $country, 'show_content' => $show_content, 'DB_fp' => $DB_fp, 'costm_ip_score' => $costm_ip_score, 'auto_black' => $auto_black, 'is_virtual' => $is_virtual, 'auto_black_times' => $auto_black_times, 'white_params' => $white_params, 'iphone_model' => $iphone_model, 'write_log' => $write_log, 'zh_on' => $zh_on, 'os_on' => $os_on, 'keep_params' => $keep_params, 'redirect_method' => $redirect_method, 'DB_zp' => $DB_zp, 'mobile_on' => $mobile_on, 'v_referer' => $v_referer, 'risk_number' => $risk_number, 'risk_enhanced' => $risk_enhanced, 'url_args_timeout' => $url_args_timeout, 'debug_mode' => $debug_mode, 'ad_fb' => $ad_fb, 'ad_google' => $ad_google, 'ad_tiktok' => $ad_tiktok, 'ad_strict' => $ad_strict, 'ad_spm_id' => $ad_spm_id, ]); try { $pdoBind = DomainRepository::pdo(); DomainRepository::ensureTable($pdoBind); $siteDomainRaw = $_REQUEST['site_domain_id'] ?? '0'; if ($siteDomainRaw === 'random') { $existingId = DomainRepository::domainIdForConfig($pdoBind, $check_name); if ($existingId > 0) { $siteDomainId = $existingId; } else { $siteDomainId = DomainRepository::pickRandomDomainId($pdoBind); } } else { $siteDomainId = (int) $siteDomainRaw; } if ($siteDomainId > 0) { DomainRepository::bindConfigToDomain($pdoBind, $check_name, $siteDomainId); } else { DomainRepository::clearConfigBinding($pdoBind, $check_name); } } catch (Throwable $e) { } echo(""); exit(); } } function write_file($file_name, $text_str) { $f = fopen($file_name, "w"); rewind($f); fwrite($f, $text_str); fclose($f); } function onoff_radio($name, $val, $label_on='开启', $label_off='关闭') { $on = ($val == 'ON') ? 'active' : ''; $off = ($val != 'ON') ? 'active' : ''; return '
'; } function dash_truncate_attr($text, $maxLen = 52) { $text = (string) $text; $esc = htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); if (function_exists('mb_strlen') && function_exists('mb_substr')) { if (mb_strlen($text, 'UTF-8') <= $maxLen) { return $esc; } return '' . htmlspecialchars(mb_substr($text, 0, $maxLen, 'UTF-8'), ENT_QUOTES, 'UTF-8') . '…'; } if (strlen($text) <= $maxLen) { return $esc; } return '' . htmlspecialchars(substr($text, 0, $maxLen), ENT_QUOTES, 'UTF-8') . '…'; } ?> IPCLOAKAPI 多功能管理后台面板 v8.2.1

IPCLOAKAPI 多功能管理后台面板 v8.2.1

alert('密码错误!');window.location='{$current_name}';"); exit(); } // 站点域名管理 $cloakDomainMsg = ''; $cloakDomainErr = ''; $cloakCfEnabled = CloudflareConfig::isEnabled(); if (!empty($_REQUEST['action']) && $_REQUEST['action'] === 'add_domain') { $hostText = trim((string) ($_POST['new_hostnames'] ?? $_POST['new_hostname'] ?? '')); if ($hostText !== '') { try { $pdoDom = DomainRepository::pdo(); $dnsMode = $_POST['dns_mode'] ?? 'auto'; if (!in_array($dnsMode, ['auto', 'manual'], true)) { $dnsMode = 'auto'; } if ($dnsMode === 'auto' && !$cloakCfEnabled) { $cloakDomainErr = '自动模式需要先在 cong.php 配置 Cloudflare API Token 与 Account ID,或改选手动模式。'; } else { $res = DomainProvisioningService::provisionBatch($pdoDom, $hostText, $dnsMode); if ($res['ok']) { $addedNames = array_map(static function ($row) { return $row['hostname'] ?? ''; }, $res['added'] ?? []); $addedNames = array_filter($addedNames); $cloakDomainMsg = '已成功添加 ' . count($addedNames) . ' 个域名:' . htmlspecialchars(implode('、', $addedNames)); if (($res['dns_mode'] ?? '') === 'auto' && $cloakCfEnabled) { $cloakDomainMsg .= '。请到注册商修改 Nameserver 后,在列表中点击「检测/刷新」。'; } elseif (($res['dns_mode'] ?? '') === 'manual') { $cloakDomainMsg .= '(手动解析模式,无需 Cloudflare 检测)。'; } else { $cloakDomainMsg .= ',请在编辑配置时关联此域名。'; } if (!empty($res['failed'])) { $failParts = []; foreach ($res['failed'] as $f) { $failParts[] = ($f['hostname'] ?? '?') . '(' . ($f['error'] ?? '失败') . ')'; } $cloakDomainErr = count($res['failed']) . ' 个域名添加失败:' . htmlspecialchars(implode(';', $failParts)); } } else { $cloakDomainErr = $res['error'] ?? '添加失败'; if (!empty($res['failed'])) { $failParts = []; foreach ($res['failed'] as $f) { $failParts[] = ($f['hostname'] ?? '?') . '(' . ($f['error'] ?? '失败') . ')'; } $cloakDomainErr .= ':' . htmlspecialchars(implode(';', $failParts)); } } } } catch (Throwable $e) { $cloakDomainErr = $e->getMessage(); } } else { $cloakDomainErr = '请至少输入一个域名'; } } if (!empty($_REQUEST['action']) && $_REQUEST['action'] === 'check_domain') { $domainId = (int) ($_POST['domain_id'] ?? $_REQUEST['domain_id'] ?? 0); $jsonOut = isset($_REQUEST['format']) && $_REQUEST['format'] === 'json'; try { $res = DomainProvisioningService::checkAndProvision(DomainRepository::pdo(), $domainId); if ($jsonOut) { header('Content-Type: application/json; charset=utf-8'); echo json_encode($res, JSON_UNESCAPED_UNICODE); exit; } if ($res['ok']) { $cloakDomainMsg = $res['message'] ?? '检测完成'; } else { $cloakDomainErr = $res['message'] ?? '检测失败'; } } catch (Throwable $e) { if ($jsonOut) { header('Content-Type: application/json; charset=utf-8'); echo json_encode(['ok' => false, 'message' => $e->getMessage()], JSON_UNESCAPED_UNICODE); exit; } $cloakDomainErr = $e->getMessage(); } } if (!empty($_REQUEST['action']) && $_REQUEST['action'] === 'delete_domain' && !empty($_REQUEST['domain_id'])) { try { $res = DomainProvisioningService::deleteWithCloudflare(DomainRepository::pdo(), (int) $_REQUEST['domain_id']); if ($res['ok']) { $cloakDomainMsg = $res['message'] ?? '域名已删除。'; if (!empty($res['warning'])) { $cloakDomainErr = $res['warning']; } } else { $cloakDomainErr = $res['message'] ?? '删除失败'; } } catch (Throwable $e) { $cloakDomainErr = $e->getMessage(); } } // 系统状态检测(列表页用) function dash_check_mysql() { try { $pdo = new PDO('mysql:host=127.0.0.1;dbname=' . DB_NAME . ';charset=utf8mb4', DB_USERNAME, DB_PASSWORD, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); return true; } catch (Throwable $e) { return false; } } function dash_check_redis() { if (!extension_loaded('redis') || strtoupper(REDIS_ENABLED) !== 'ON') return null; try { $r = new Redis(); if (!@$r->connect(REDIS_HOST, (int)REDIS_PORT, 0.5)) return false; $r->ping(); return true; } catch (Throwable $e) { return false; } } function dash_sanitize_config_name($name) { $name = trim(str_replace('.php', '', (string) $name)); if ($name === '' || !preg_match('/^[a-zA-Z0-9_-]+$/', $name)) { return ''; } return $name; } function dash_suggest_copy_config_name($source) { $source = dash_sanitize_config_name($source); if ($source === '') { return 'new_config'; } $base = $source . '_copy'; $candidate = $base; $suffix = 2; while (file_exists(__DIR__ . "/check_config/{$candidate}_config.php")) { $candidate = $base . $suffix; $suffix++; } return $candidate; } function dash_cfg_get($raw, $name) { if (preg_match("/define\('" . preg_quote($name, '/') . "',\s*'([^']*)'\)/", $raw, $m)) { return $m[1]; } return ''; } function dash_build_ad_links($pf, $protocol, $host) { $path = __DIR__ . "/check_config/{$pf}_config.php"; try { $pdoDashHost = DomainRepository::pdo(); DomainRepository::ensureTable($pdoDashHost); $bound = DomainRepository::primaryHostnameForConfig($pdoDashHost, $pf); if ($bound !== '') { $host = $bound; } } catch (Throwable $e) { } $host = DomainRepository::normalizeHostname($host); if ($host === '') { $host = DomainRepository::normalizeHostname($_SERVER['HTTP_HOST'] ?? ''); } $base = rtrim($protocol . $host, '/') . '/' . (($pf != 'index') ? $pf : ''); if (!file_exists($path)) { return [['label' => '落地链接', 'url' => $base]]; } $raw = file_get_contents($path); $enabled = []; if (dash_cfg_get($raw, 'CLOAK_AD_FB') === 'ON') { $enabled[] = CloakAdSourceGuard::PLATFORM_FB; } if (dash_cfg_get($raw, 'CLOAK_AD_GOOGLE') === 'ON') { $enabled[] = CloakAdSourceGuard::PLATFORM_GOOGLE; } if (dash_cfg_get($raw, 'CLOAK_AD_TIKTOK') === 'ON') { $enabled[] = CloakAdSourceGuard::PLATFORM_TIKTOK; } if (empty($enabled)) { return [['label' => '落地链接', 'url' => $base]]; } $spmId = dash_cfg_get($raw, 'CLOAK_AD_SPM_ID'); $fpUrls = []; if (preg_match("/define\('DB_FP',\s*(array\s*\(.*?\))\s*\)/s", $raw, $fpMatch)) { @eval('$fpUrls = ' . $fpMatch[1] . ';'); } $query = CloakAdSourceGuard::buildAdLinkQuery($enabled, $spmId, $fpUrls); $url = $base . ($query !== '' ? '?' . $query : ''); return [['label' => '落地链接', 'url' => $url]]; } function dash_build_config_index() { $items = []; $dir = __DIR__ . '/check_config'; $dh = @opendir($dir); if (!$dh) { return $items; } while (false !== ($f = readdir($dh))) { if ($f === '.' || $f === '..') { continue; } $path = $dir . '/' . $f; if (is_dir($path) || $f === 'index.php' || $f === 'a.txt') { continue; } if (substr($f, -11) !== '_config.php') { continue; } $name = str_replace('_config.php', '', $f); if ($name === '' || !preg_match('/^[a-zA-Z0-9_-]+$/', $name)) { continue; } $entryPhp = __DIR__ . '/' . $name . '.php'; if (!file_exists($entryPhp)) { copy(__DIR__ . '/tem_link.php', $entryPhp); } $items[] = [ 'name' => $name, 'mtime' => (int) @filemtime($path), 'path' => $path, ]; } closedir($dh); usort($items, function ($a, $b) { if ($a['mtime'] === $b['mtime']) { return strcmp($a['name'], $b['name']); } return $b['mtime'] <=> $a['mtime']; }); return $items; } function dash_paginate_configs(array $all, $q, $page, $perPage) { $q = trim((string) $q); $page = max(1, (int) $page); $perPage = max(1, (int) $perPage); if ($q !== '') { $qLower = function_exists('mb_strtolower') ? mb_strtolower($q, 'UTF-8') : strtolower($q); $all = array_values(array_filter($all, function ($row) use ($qLower) { $name = (string) ($row['name'] ?? ''); $hay = function_exists('mb_strtolower') ? mb_strtolower($name, 'UTF-8') : strtolower($name); return strpos($hay, $qLower) !== false; })); } $total = count($all); $totalPages = $total > 0 ? (int) ceil($total / $perPage) : 1; if ($page > $totalPages) { $page = $totalPages; } $offset = ($page - 1) * $perPage; return [ 'items' => array_slice($all, $offset, $perPage), 'total' => $total, 'page' => $page, 'per_page' => $perPage, 'total_pages' => $totalPages, ]; } function dash_delete_config($name) { $name = dash_sanitize_config_name($name); if ($name === '' || $name === 'index') { return false; } try { DomainRepository::clearConfigBinding(DomainRepository::pdo(), $name); } catch (Throwable $e) { } @unlink(__DIR__ . "/check_config/{$name}_config.php"); @unlink(__DIR__ . "/{$name}.php"); return true; } function dash_list_query_params($q, $page) { $params = []; if (trim((string) $q) !== '') { $params['q'] = trim((string) $q); } if ((int) $page > 1) { $params['page'] = (int) $page; } return $params; } function dash_list_url($currentName, $q, $page) { $params = dash_list_query_params($q, $page); $qs = $params !== [] ? '?' . http_build_query($params) : ''; return $currentName . $qs; } // 配置列表索引(按文件修改时间倒序) $configListAll = dash_build_config_index(); $listSearchQ = trim((string) ($_GET['q'] ?? '')); $listPage = max(1, (int) ($_GET['page'] ?? 1)); $listPerPage = 10; $configPage = dash_paginate_configs($configListAll, $listSearchQ, $listPage, $listPerPage); $products_file_ary = array_map(function ($row) { return $row['name']; }, $configListAll); // 删除 / 批量删除配置 if (!empty($_REQUEST["action"]) && $_REQUEST["action"] == "delete_config" && !empty($_REQUEST["name"])) { $name = trim($_REQUEST["name"]); if ($name == "index") { echo(""); exit(); } dash_delete_config($name); echo(""); exit(); } if (!empty($_REQUEST['action']) && $_REQUEST['action'] === 'batch_delete_config') { $names = $_REQUEST['names'] ?? []; if (!is_array($names)) { $names = [$names]; } $deleted = 0; $seen = []; foreach ($names as $rawName) { $name = dash_sanitize_config_name($rawName); if ($name === '' || $name === 'index' || isset($seen[$name])) { continue; } $seen[$name] = true; if (dash_delete_config($name)) { $deleted++; } } $redirect = dash_list_url($current_name, $_POST['q'] ?? '', 1); $msg = $deleted > 0 ? "已删除 {$deleted} 个配置" : '未删除任何配置'; echo(""); exit(); } // 加载 IP 组(编辑页用) $blackGroups = $whiteGroups = []; try { $pdoDash = new PDO('mysql:host=127.0.0.1;dbname=' . DB_NAME . ';charset=utf8mb4', DB_USERNAME, DB_PASSWORD, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]); $stb = $pdoDash->prepare("SELECT id, name FROM ip_groups WHERE type = 'black' ORDER BY id ASC"); $stb->execute(); $blackGroups = $stb->fetchAll(); $stw = $pdoDash->prepare("SELECT id, name FROM ip_groups WHERE type = 'white' ORDER BY id ASC"); $stw->execute(); $whiteGroups = $stw->fetchAll(); } catch (Throwable $e) {} $currentBlacklistGroupId = defined('BLACKLIST_GROUP_ID') ? (int)BLACKLIST_GROUP_ID : 0; $currentWhitelistGroupId = defined('WHITELIST_GROUP_ID') ? (int)WHITELIST_GROUP_ID : 0; $action = $_REQUEST['action'] ?? ''; $isEdit = in_array($action, ['edit_config', 'submit'], true); $cloakSiteDomains = []; $domainConfigMap = []; $selectedDomainId = 0; $dashboardDefaultHost = DomainRepository::normalizeHostname($_SERVER['HTTP_HOST'] ?? ''); try { $pdoDash = $pdoDash ?? DomainRepository::pdo(); DomainRepository::ensureTable($pdoDash); $cloakSiteDomains = DomainRepository::listAll($pdoDash); $domainConfigMap = DomainRepository::groupConfigsByDomainId($pdoDash); if ($isEdit) { $selectedDomainId = DomainRepository::domainIdForConfig($pdoDash, $check_name); } } catch (Throwable $e) { $cloakSiteDomains = []; $domainConfigMap = []; } // 视图判断 $_d = function($name, $default) { return defined($name) ? constant($name) : $default; }; ?>

IPCLOAKAPI 多功能管理后台面板 v8.2.1

← 返回列表 退出登录

配置管理

管理 Cloak 配置、广告落地链接与站点域名

● MySQL ' . ($mysqlOk ? '已连接' : '连接失败') . ''; if ($redisOk === null) { echo '● Redis 未启用'; } else { echo '● Redis ' . ($redisOk ? '已连接' : '连接失败') . ''; } ?> ● 配置数:(搜索「」) ● 已登记域名:
配置列表
清除
配置名称 绑定域名 广告链接(广告后台填入的链接) 真实页链接(客户到达的链接) 操作
暂无匹配的配置,请调整搜索关键词
默认 ' . htmlspecialchars($pfHost) . ''; } else { echo '' . htmlspecialchars($dashboardDefaultHost) . '
(默认后台域)
'; } ?>
' . dash_truncate_attr($first, 48) . ''; if (is_array($pfp) && count($pfp) > 1) { echo '
+' . (count($pfp)-1) . ' 个链接
'; } } else { ?>
1 || $configPage['total'] > 0): ?>
/ 页,共 1): ?>
站点域名
Cloudflare 已启用:选择「自动」时将创建 Zone 并配置 DNS/SSL;选择「手动」时仅本地登记(您已自行配置 DNS)。 源站仍需在宝塔添加站点并监听
提示:自动模式需先在 cong.php 配置 Cloudflare API Token 与 Account ID。若已自行完成 DNS 解析,请选择「手动」模式。 使用前请先在宝塔添加站点并开启 SSL。
自动:通过 Cloudflare 创建 Zone 并配置 DNS/SSL(默认)。 手动:仅登记域名,不调用 Cloudflare,无需检测/刷新。
尚未添加域名。未添加时,广告链接将使用当前后台访问域名:
域名 关联配置 CloudflareNameserver 操作
未关联'; } else { foreach ($boundConfigs as $cfgName) { echo '' . htmlspecialchars($cfgName) . ''; } } ?>
删除
← 返回配置列表
>
配置名称
关联域名
请先在上方「站点域名」中添加并在宝塔创建该站点与 SSL
尚未添加任何域名,保存后广告链接将使用
是否开启 DEBUG 模式
开启后访问落地链接将显示格式化调试页(判定结果、理由、代码行、访客信息),不会跳转真实页/安全页;生产环境请关闭
屏蔽模式
国家条件
开启后仅允许填写的国家访问真实页;关闭则不做国家拦截。
广告策略 ID
安全页跳转方式
安全页链接(留空显示空白页)
真实页跳转方式
真实页链接地址 $link) { if ($idx == 0) { echo ' + 新增'; } else { echo '
删除'; } } } else { echo ' + 新增'; } ?>