NAC_Blockchain/docs/issues/ISSUE_050_QUANTUM_BROWSER_F...

4.1 KiB
Raw Permalink Blame History

工单 #050 - NAC 量子全息区块浏览器路由修复与功能验证

工单编号: #050
状态: 已关闭
日期: 2026-02-27
优先级: 高
负责模块: /opt/nac-quantum-browser
访问地址: https://explorer.newassetchain.io


问题描述

NAC 量子全息区块浏览器的以下功能无法正常工作:

  1. 区块详情页 (/block?n=100) — 返回首页内容而非区块详情
  2. 搜索功能 (/search?q=100) — 返回"未找到结果"而非正确的区块信息

根本原因分析

问题一Nginx PATH_INFO 未传递(区块详情页路由失败)

诊断过程

  • PHP CLI 测试:BLOCK_PAGE_OK (路由正确)
  • PHP-FPM 测试(不带 PATH_INFO返回首页内容
  • PHP-FPM 测试(带 PATH_INFO区块详情

根本原因ThinkPHP 6 的路由解析依赖 PATH_INFO 环境变量。Nginx 的 fastcgi_params 文件没有包含 PATH_INFO 参数,导致 PHP-FPM 无法获取路径信息ThinkPHP 路由回退到默认的 index() 方法(首页)。

原始 Nginx 配置(错误)

location ~ \.php$ {
    fastcgi_pass   unix:/tmp/php-cgi-81.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
    # 缺少 PATH_INFO 参数!
}

问题二:搜索控制器 API 响应格式解析错误

诊断过程

  • NAC API 实际返回格式:{"type":"block","data":{...区块数据...}}
  • 控制器代码错误读取:$raw['data']['type'](应为 $raw['type']
  • 控制器代码错误读取:$raw['data']['block'](应为 $raw['data']

修复方案

修复一Nginx 配置添加 PATH_INFO 支持

文件: /www/server/panel/vhost/nginx/explorer.newassetchain.io.conf

# 修改 location 规则支持 PATH_INFO
location ~ [^/]\.php(/|$) {
    fastcgi_pass   unix:/tmp/php-cgi-81.sock;
    fastcgi_index  index.php;
    # 分离 PATH_INFOThinkPHP 路由依赖此参数)
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO       $fastcgi_path_info;
    fastcgi_param  PATH_TRANSLATED $document_root$fastcgi_path_info;
    include        fastcgi_params;
    fastcgi_connect_timeout 60s;
    fastcgi_send_timeout    60s;
    fastcgi_read_timeout    60s;
}

同时修改 URL 重写规则:

location / {
    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php?s=$1 last;
        break;
    }
}

修复二:搜索控制器 API 解析逻辑

文件: /opt/nac-quantum-browser/app/controller/Index.php

// 修复前(错误)
$type = $raw['data']['type'] ?? '';
if ($type === 'block' && !empty($raw['data']['block'])) {
    $b = $raw['data']['block'];

// 修复后(正确,兼容两种格式)
$type = $raw['type'] ?? ($raw['data']['type'] ?? '');
if ($type === 'block') {
    $b = $raw['data'] ?? [];
    if (empty($b['number']) && !empty($raw['data']['block'])) {
        $b = $raw['data']['block'];
    }

验证结果

页面 URL 修复前 修复后
首页 / 正常 正常
区块列表 /blocks 正常 正常
区块详情 /block?n=100 返回首页 显示区块详情
节点状态 /nodes 正常 正常
搜索 /search?q=100 未找到结果 找到区块 #100

Git 提交记录

commit 6c72f67
feat: NAC 量子全息区块浏览器 v1.0 - 工单#050
仓库路径: /opt/nac-quantum-browser/.git
54 files changed, 3531 insertions(+)

系统信息

  • 服务器: 103.96.148.7:22000
  • Web 框架: ThinkPHP 6
  • PHP 版本: PHP-FPM 8.1
  • Web 服务器: Nginx 1.26.3(宝塔面板)
  • WebSocket: Workerman端口 9553
  • NAC API: http://localhost:9551

关联工单

  • 工单 #047/#048: NAC Explorer API 去除模拟数据(已关闭)
  • 工单 #050: 量子浏览器路由修复(本工单,已关闭)

记录人: NAC Dev | 2026-02-27