



① Hub 授权页显示的值 ← URL 参数plugins/market_hub/AuthorizeController.php:60
$siteUrl = $this->normSiteUrl($this->param('site_url')); // 取 $_GET['site_url']
它只校验两件事:http(s):// 开头 + filter_var(FILTER_VALIDATE_URL) 通过。
我实测了:https://tuzi.ytuzi093712 → 判为合法(PHP 的 URL 校验不检查 TLD 是否存在)→ 所以这种残缺域名能照常显示出来。
② 这个参数由申请方站点拼 ← app/Controllers/Admin/MarketController.php:194
$siteUrl = $this->siteBaseUrl(); // 拼进 /market/authorize?site_url=...
③ siteBaseUrl()(同文件 :277-286)的取值优先级
SITE_URL 常量(若已定义且非空)→ 直接用它scheme://HTTP_HOST + BASE_PATH(这时才是「来的域名」)④ 而 SITE_URL 常量本身还有四级链(config.php:91-129)
| 级 | 来源 | 说明 |
|---|---|---|
| ① | 环境变量 FLINTHUB_SITE_URL | 运维应急开关 |
| ② | 常量 SITE_URL_OVERRIDE | 在 config.php 里手工 define |
| ③ | settings.site_url | 后台「站点设置 → 站点域名」(读 protected/settings_cache.php) |
| ④ | 回落 scheme://SERVER_NAME(再退 HTTP_HOST) | ⚠️ 未配域名时取到服务器 IP |
所以回答你的问题:配置优先,域名兜底。只有 ①②③ 全空,才会拿请求的域名。
按可能性排:
tuzi.ytuzi093712 明显缺 .com/.xyz 这类 TLD,很像手填漏了)。这是最可能的。server_name 本身就是这个残缺值。site_url 参数换成别的地址发给他)。⚠️ 这个要注意:Hub 侧目前不做任何来源校验 —— AuthorizeController.php:13-14 的注释里明确写着这是已知的「诱导授权」残留风险,现有缓解只有「授权页醒目展示 + code 与 site_url 绑定 + 一次性 + 可吊销」。也就是说,光看这个页面无法分辨是对方配置错还是有人伪造。config.php 里搜 SITE_URL_OVERRIDE(对应 ②)server_name(对应 ④)最直接的一条命令(在他站点根跑):
php -r 'require "config.php"; echo "SITE_URL = ", SITE_URL, PHP_EOL;'

protected/settings_cache.php
这个文件,然后再看一下。define('SITE_URL_OVERRIDE', 'https://他的域名');
插在他 config.php 里 $siteUrlOverride = \getenv('FLINTHUB_SITE_URL'); 那行之前。老版模板有第 ② 级,所以必然生效 —— 30 秒,不碰 data。
把第 ③ 级的读取前移到 index.php(index.php 是进包的):
在
index.php加载config.php之前,先读protected/settings_cache.php,若有site_url就define('SITE_URL_OVERRIDE', ...)。
这样:
config.php → 第 ② 级命中 → 补上了缺失的第 ③ 级,后台改域名立刻生效;config.php → 第 ② 级本就优先于第 ③ 级 → 行为完全不变;请 登录