惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
J
Java Code Geeks
L
LangChain Blog
V
V2EX
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
博客园 - 司徒正美
B
Blog
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog

洛丽糖

西行乱斗(送一个本体兑换码,先到先得) Tabbit浏览器多功能AI助手 关于博主年纪轻轻就得了哪些病。 使用AI写的一款“魔法花园”程序源码 猜猜这是什么?夏天的味道。 "微博客"的重生与否之相关历程 小小甲虫拿捏 月季从盛放至凋零 “微博客”程序正式停止维护更新了 救命!这串李子看得我口水狂飙! 山野桃林闲游 枝头青桃,满是初夏的清甜念想 从别人家路过拍的,不知道叫什么? 一颗桃子的一生:从青涩到“爆甜”的旅程 田地变虾塘,农村人的前路该往哪走 p:last-child 与 p:last-of-type 的核心区别(AI教程版) 雪豹速清app 很久之前拍的:青黄小樱桃,酸甜正撩人 “XmBooks”主题更新日志动态 网站 SSL 证书过期,火速续上免费三月证书 Typecho走心评论精选功能实现代码教程 本站也实现了走心评论精选功能 老家插秧季,一田新绿入夏来 稻田里撞见,一场新生的蜕变
使用AI完成的一款网址导航程序
寻梦xunm · 2026-09-13 · via 洛丽糖

注意:这是一款通过AI完成的网址导航程序,不是作者自己动手编写开发的,作者也只是提供开发思路。

网址导航系统(xmurl)

一个基于原生 PHP 开发的轻量级网址导航站。
零第三方依赖 —— 不引入任何 Composer 包、不用任何第三方 CSS/JS 框架,全部代码自行实现;同时支持 MySQL / SQLite 双数据库驱动,下载即用。

前台提供分类导航、多引擎搜索、热门排行、站点详情与搜索引擎权重查询;后台提供分类 / 网址 / 公告 / 系统设置的完整管理,以及投稿审核、数据导入导出、模板切换等运营能力。

  • 当前版本:1.0.6bootstrap.php 中的 XM_VERSION
  • 运行环境:PHP 7.4+(推荐 8.x)、MySQL 5.7+ / SQLite 3
  • 授权:私有项目

一、核心特性

模块能力
导航展示分类聚合、图标展示、站点描述、点击量统计、热门 TOP 排行、最新收录、推荐位
搜索聚合站内搜索 + 百度 / 搜狗 / 必应 / 360 / 神马 / 头条 / 谷歌 七引擎一键切换
站点详情站点信息、网站截图、相关推荐、搜索引擎权重与收录量查询(百度 / 360 / 搜狗 / 神马 / 必应 / 头条 / 谷歌)
信息自动抓取输入网址一键抓取标题 / 描述 / favicon / Logo(含 SSRF 白名单防护、512KB 体积上限、字符集自动转码)
图标三来源自动抓取、手动填 URL、本地上传,三者共用同一套选择器组件
前台投稿访客自助提交网址,蜜罐反机器人 + 回链自动检测 + 待审核队列
权重接口适配任意第三方权重 API 可通过「接口地址 + 字段映射」接入,无需改代码;内置 apihz / chinaz / nxvav 三套一键预设
数据管理CSV / JSON 导入导出(含字段映射与导入报告)
模板系统前台 / 后台皮肤可切换,视图解析走 Skin::resolve()
多用户与安全管理员会话、CSRF 令牌、IP 维度服务端限流、参数化 SQL、全站输出转义

二、技术栈与设计约束

说明
语言PHP(declare(strict_types=1),要求 7.4+)
架构原生 MVC 简化实现,无框架
命名空间xm\core\*(基础层)、xm\app\model\*(模型层)
自动加载bootstrap.php 内注册的 PSR-4 简化自动加载器(含目录穿越防护)
数据库PDO 封装(xm\core\Db),支持 MySQL / SQLite,表前缀可配
前端原生 HTML / CSS / JavaScript,无任何框架;脚本按页面拆分为独立文件
依赖零 Composer 包、零第三方 CDN 资源,可完全离线部署

项目约定:

  • 代码标识符(类 / 方法 / 变量 / 数组键)统一使用英文并遵循 PSR-12;注释、异常消息使用中文。
  • 视图模板位于 views/**,由 Skin::resolve() 按区域(frontend / admin)解析。
  • 前端资源通过 ?v=XM_VERSION 破缓存,修改 assets/ 下任意 css/js 后必须手动递增 XM_VERSION
  • 所有 <img> 必须声明 loading="lazy" decoding="async";图片容器需有固定尺寸或 aspect-ratio,避免布局跳动。

三、目录结构

t.cc/
├── index.php            前台首页 / 公告列表 / 分类页(按 p / c / s / e / page 参数分流)
├── submit.php           前台投稿表单
├── detail.php           站点详情页(含权重查询面板)
├── go.php               出站跳转(点击计数 + 白名单校验)
├── fetchmeta.php        公开接口:抓取目标站标题/描述/图标
├── upload.php           公开接口:图标上传
├── weight.php           公开接口:搜索引擎权重查询
├── install.php          安装向导(首次部署用)
├── bootstrap.php        引导文件:常量、自动加载、配置、会话、数据库初始化
├── config.php           站点配置(数据库、调试、时区、站点 key)
│
├── core/                基础层
│   ├── Db.php           PDO 封装(查询构造、事务、表名引用)
│   ├── Auth.php         管理员认证(bcrypt 哈希、会话、口令修改)
│   ├── Csrf.php         CSRF 令牌生成与校验
│   ├── RateLimiter.php  IP 维度服务端限流(落盘 + 原子写 + 故障放行)
│   ├── Skin.php         模板解析与皮肤管理
│   └── Util.php         工具集(转义、输入、URL、图标、分页、IP 等)
│
├── app/model/           模型层
│   ├── Base.php         模型基类(增删改查、分页、排序、条件构造)
│   ├── Link.php         网址(前台查询、投稿、审核、点击、搜索)
│   ├── Category.php     分类(含合并、级联删除)
│   ├── Notice.php       公告
│   ├── Setting.php      系统设置(KV 表 + 分组 + 类型 + 默认值)
│   ├── Schema.php       建表 / 种子数据 / 幂等升级
│   ├── SiteMeta.php     外站信息抓取(SSRF 防护、HTML 解析)
│   ├── WeightQuery.php  搜索权重查询(三数据源 + 自定义适配 + 缓存)
│   ├── BacklinkChecker.php 友链回链自动检测
│   ├── IconUploader.php 图标上传校验与落盘
│   ├── Importer.php     数据导入(CSV / JSON)
│   └── Exporter.php     数据导出
│
├── admin/               后台
│   ├── index.php        后台页面路由(dashboard/categories/links/reviews/notices/settings/...)
│   └── api.php          后台统一 AJAX 接口(POST + 登录态 + CSRF)
│
├── views/               视图模板
│   ├── layout/          前台公共头尾(header / footer)
│   ├── admin/           后台各页面模板 + layout
│   ├── home.php         首页
│   └── notices.php      公告列表
│
├── assets/              前端资源
│   ├── style.css        前台样式(CSS 变量 + 深色模式)
│   ├── app.js           前台公共脚本
│   ├── submit.js        投稿页脚本(抓取、图标选择、校验)
│   ├── detail.js        详情页脚本(权重查询)
│   ├── admin.css        后台样式(含弹窗、响应式)
│   ├── admin.js         后台脚本(弹窗、表单、接口调用)
│   └── lazyload.js      图片懒加载兜底(老浏览器)
│
├── data/                运行时数据(缓存、证书、导出临时文件)
│   ├── cacert.pem       CA 根证书包(HTTPS 校验用)
│   ├── meta_*.dat       抓取结果缓存
│   ├── weight_*.dat     权重查询缓存
│   └── rate_*.dat       限流计数
│
└── uploads/             上传文件(图标等,需可外链访问)
    └── icons/YYYYmm/    按月归档的图标

四、数据模型

系统共 5 张表,全部通过 Schema::create() 建立,Schema::upgrade() 在每次请求时幂等补齐增量字段(老库可平滑升级,无需手工改表)。

用途关键字段
admins管理员账号usernamepassword(bcrypt)、last_login_atlast_login_ip
categories网址分类nameslug(唯一)、iconremarksort_orderstatus
links网址条目category_idtitleurldescriptioniconhitsis_recommendstatussubmitterreview_notebacklink_pass
notices站点公告titlecontenttypeis_topstatussort_order
settings系统设置(KV)k(唯一)、vgroup_name
settings 为键值表,扩展设置项不需要改表结构 —— 在 Setting::DEFAULTS 追加一行并在 Setting::GROUPS 登记分组即可,后台设置页会自动渲染。
未保存过的设置项不落库,读取时回落到默认值。

五、前台功能

页面 / 入口说明
首页 index.php分类导航主体 + 搜索横幅 + 侧栏(热门 TOP10、最新收录、公告)
分类页 index.php?c={slug}单分类下的网址列表,支持排序与分页
搜索 index.php?s={关键词}站内搜索,带高亮与结果计数
公告列表 index.php?p=notices公告分页浏览
投稿 submit.php访客提交网址(可开关),支持一键抓取站点信息、三种图标来源
详情 detail.php?id={id}站点信息、截图、相关推荐、权重查询面板
跳转 go.php?id={id}出站跳转,累加点击量、记录最后点击时间

搜索聚合:七种搜索引擎可切换,用户选择会带参数透传,站内搜索与外部引擎搜索在同一输入框完成。

权重查询(详情页):展示各搜索引擎的权重等级(BR)、收录量与预估流量。支持三种数据源 —— 站长之家、接口盒子、自定义接口,可配置自动或手动触发,查询结果带缓存(默认 6 小时),失败时回退旧缓存并进入冷却期,避免反复打第三方接口。

信息自动抓取:输入网址后点击「自动获取」,服务端抓取目标站点的 <title>description、favicon、og:image 并回填表单。前台投稿场景只填空字段、不覆盖用户手填内容;后台编辑场景直接覆盖(意图是刷新)。触发时机完全由按钮控制,失焦 / 回车均不触发。


六、后台功能

后台入口 admin/index.php,所有 AJAX 请求统一走后端接口(POST + 登录态 + CSRF 校验,响应结构 {code, msg, data})。

页面功能
仪表盘分类数 / 网址数 / 待审数 / 点击量概览
分类管理新增、编辑、排序、启停、合并、级联删除(含关联网址)
网址管理新增、编辑、删除、排序、启停、推荐、批量操作、审核通过 / 驳回、自动获取站点信息
投稿审核待审队列,查看投稿人、回链检测结果,一键通过或驳回并填写备注
公告管理发布、编辑、置顶、启停
系统设置按分组管理的全部配置项(站点 / 首页 / SEO / 列表 / 皮肤 / 投稿 / 权重 / 自定义接口)
数据导入CSV / JSON 导入,支持字段映射,返回导入报告(插入 / 更新 / 跳过 / 失败)
数据导出导出全站数据,生成带 token 的临时下载文件(自动过期清理)
模板切换前台 / 后台皮肤选择
修改密码更新管理员口令(改后强制重新登录)

自定义权重接口:在「自定义权重接口」设置组填写接口地址(支持 {domain} 占位)、请求方式、附加参数与请求头、成功判定条件、数据根路径、字段映射(每行 统一字段=返回字段路径,支持 list[0].Br 这类嵌套路径)。配置完成后可在后台直接做接口连通性测试,返回逐源明细与字段命中情况,不写缓存。


七、配置说明

config.php 返回一个数组,主要键:

说明
debug调试模式,开启后显示全部错误(生产环境请关闭)
timezone时区,默认 Asia/Shanghai
key站点密钥,用于令牌派生
db.drivermysqlsqlite
db.dsnPDO 连接串(MySQL 形如 mysql:host=...;port=...;dbname=...
db.user / db.pass数据库账号
站点名称、LOGO、备案号、SEO、列表条数、投稿开关、权重查询参数等运营配置不在 config.php,而是存在数据库 settings 表中,登录后台「系统设置」即可修改。

config.php 不存在,前台会自动跳转到 install.php 安装向导。


八、安全设计

层面措施
SQL全量参数化查询,表名 / 字段名走白名单,LIKE 通配符转义
XSS输出统一经 Util::e() 转义;前端动态渲染做实体编码,杜绝对不可信数据直接 innerHTML
CSRF后台全部写操作校验令牌(支持表单字段与请求头两种传递)
会话Cookie 设置 HttpOnly + SameSite=Lax,HTTPS 下自动加 Secure
限流RateLimiter 按 IP 维度服务端计数并落盘(抓取 / 上传 / 权重 / 登录四处),不依赖 $_SESSION
SSRF外站抓取前校验协议白名单与端口白名单,同时校验 A 与 AAAA 记录,拒绝内网 / 保留地址;禁用自动重定向,改为手动逐跳并在每一跳前重新校验
上传仅允许图片类型(getimagesize 判定),排除 SVG,限制体积,按年月归档
HTTPS调用第三方接口时校验 CA 根证书(data/cacert.pem),不使用 VERIFYPEER=false 绕过
部署nginx 侧封锁运行时目录(data/.workbuddy/、点文件)、限制上传目录仅静态访问且脚本 404、拦截归档类扩展名

九、运行环境与部署

环境要求

  • PHP ≥ 7.4(推荐 8.1+),需启用 pdo_mysql(或 pdo_sqlite)、mbstringcurlopenssl
  • Web 服务器:nginx + PHP-FPM(或 Apache)
  • 数据库:MySQL 5.7+ / MariaDB 或 SQLite 3

部署步骤

  1. 将项目文件放入站点根目录,确保 data/uploads/ 可写。
  2. 浏览器访问站点,按 install.php 向导填写数据库信息并创建管理员账号。
  3. 安装完成后务必删除或重命名 install.php,防止被重复执行。
  4. 配置 Web 服务器:将站点根指向项目目录;按上文「安全设计」补上目录封锁规则。
  5. 登录后台,在「系统设置」中完善站点名称、LOGO、SEO 等信息。

性能与缓存

  • 抓取结果、权重结果、限流计数均落盘缓存,减少外站请求。
  • 前台资源通过版本号控制缓存;建议对 assets/ 设置较长过期时间。

十、版本与约定速查

版本常量XM_VERSION(位于 bootstrap.php
会话名xmnav_sid
数据库表admins / categories / links / notices / settings
命名空间xm\core\*xm\app\model\*
后台接口admin/api.php,参数 a={动作名},如 a=link.save
后台响应结构{code, msg, data}

改代码时的注意事项

  1. 修改 assets/ 下的任何 CSS / JS 后,必须递增 XM_VERSION,否则浏览器会继续使用旧缓存。
  2. 新增设置项只需改 Setting::DEFAULTSSetting::GROUPS,无需改动数据库结构。
  3. 新增数据表字段请在 Schema::upgrade() 中用 addColumnIfMissing() 追加,保证老库可平滑升级。
  4. 任何出站 HTTP 请求必须先过 SSRF 校验,且禁止开启自动跟随重定向。
官方网站:http://5201317.xyz
演示截图:

火狐截图_2026-09-13T02-42-20.378Z.png
火狐截图_2026-09-13T02-43-18.789Z.png
火狐截图_2026-09-13T02-43-38.706Z.png
火狐截图_2026-09-13T02-43-55.096Z.png
火狐截图_2026-09-13T02-44-09.472Z.png
火狐截图_2026-09-13T02-46-32.071Z.png
火狐截图_2026-09-13T02-45-25.032Z.png
火狐截图_2026-09-13T02-45-07.497Z.png
火狐截图_2026-09-13T02-44-51.617Z.png
火狐截图_2026-09-13T02-44-34.758Z.png
火狐截图_2026-09-13T02-44-20.772Z.png