[已修复] 后台插件商店授权指向官网授权页上面显示的地址不是我的

🌴Lv.5 高级 🌏 正式会员
2026-10-04 15:25:02
这个地址不是我的地址这个地址根本打不开怎么修改为我的呢?
Last edited by laoxie at 2026-10-04 17:07
星空之下,我们都是孤独的追梦者
| Views 19 | Replies 30

All Replies (9)

👑Lv.11 元老 🌏 正式会员
2026-10-04 15:26:48
那你是从哪个链接过来的呢?
轻量级、高性能、零 MySQL 依赖的PHP社区系统。
#1 floor
👑Lv.11 元老 🌏 正式会员
2026-10-04 15:40:43
你看一下后台基本信息里面的站点域名填写了没?
注销掉授权(如果有的话)重新填写url,然后再申请试一下。
轻量级、高性能、零 MySQL 依赖的PHP社区系统。
#2 floor
👑Lv.11 元老 🌏 正式会员
2026-10-04 15:47:41

完整取值链路(4 层)

① Hub 授权页显示的值 ← URL 参数
plugins/market_hub/AuthorizeController.php:60

php
$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

php
$siteUrl = $this->siteBaseUrl();      // 拼进 /market/authorize?site_url=...

③ siteBaseUrl()(同文件 :277-286)的取值优先级

  1. SITE_URL 常量(若已定义且非空)→ 直接用它
  2. 否则回落: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

所以回答你的问题:配置优先,域名兜底。只有 ①②③ 全空,才会拿请求的域名。

为什么会出现「不是他的地址」

按可能性排:

  1. 他站点的 ③ 填错了 —— 后台「站点设置 → 站点域名」漏了后缀(tuzi.ytuzi093712 明显缺 .com/.xyz 这类 TLD,很像手填漏了)。​这是最可能的。
  2. 他站点的 ④ 在生效 —— 没配域名,服务器 server_name 本身就是这个残缺值。
  3. 有人伪造了授权链接(把 site_url 参数换成别的地址发给他)。⚠️ 这个要注意:Hub 侧目前不做任何来源校验 —— AuthorizeController.php:13-14 的注释里明确写着这是已知的「诱导授权」残留风险,现有缓解只有「授权页醒目展示 + code 与 site_url 绑定 + 一次性 + 可吊销」。也就是说,光看这个页面无法分辨是对方配置错还是有人伪造。

让他自查(三条,对应 ②③④)

  1. 后台 → 站点设置 → 站点域名:看填的什么(对应 ③)
  2. config.php 里搜 SITE_URL_OVERRIDE(对应 ②)
  3. 服务器 Nginx/Apache 的 server_name(对应 ④)

最直接的一条命令(在他站点根跑):

bash
php -r 'require "config.php"; echo "SITE_URL = ", SITE_URL, PHP_EOL;'
轻量级、高性能、零 MySQL 依赖的PHP社区系统。
#3 floor
🌴Lv.5 高级 🌏 正式会员
2026-10-04 15:59:16
星空之下,我们都是孤独的追梦者
#4 floor
🌴Lv.5 高级 🌏 正式会员
2026-10-04 16:06:11
我填写的这个地址但是下面的当前生效值不是这个地址。。。
星空之下,我们都是孤独的追梦者
#5 floor
👑Lv.11 元老 🌏 正式会员
2026-10-04 16:11:44
你看一下config.php有没有生效值这一行,如果有就删掉这一行。
后台更新一下缓存,看看有没有改变?
再就是手工删除

protected/settings_cache.php
这个文件,然后再看一下。

轻量级、高性能、零 MySQL 依赖的PHP社区系统。
#6 floor
👑Lv.11 元老 🌏 正式会员
2026-10-04 16:17:00
你是用的什么服务器?我看生效的那个不像个真正的域名啊
你在服务器或什么地方填过那个生效值,你找一下,因为我不清楚你的环境,只能靠推测。
轻量级、高性能、零 MySQL 依赖的PHP社区系统。
#7 floor
👑Lv.11 元老 🌏 正式会员
2026-10-04 17:01:38
为了这个问题,我快让AI把我弄疯了,你自己问问AI吧,实在每个环境不一样,我也搞不定。
轻量级、高性能、零 MySQL 依赖的PHP社区系统。
#8 floor
👑Lv.11 元老 🌏 正式会员
2026-10-04 17:09:51

对已经在受影响的用户:一行就行

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 → 第 ② 级本就优先于第 ③ 级 → 行为完全不变;
轻量级、高性能、零 MySQL 依赖的PHP社区系统。
#9 floor

Please Log in