1. 先定主题,不准套通用模板
每一页必须先回答“这页到底讲什么”。主题确定后,再决定标题、流程图、截图和文案,不允许直接复制上一页结构换字。
convertQR.html的主题是“PDF 生成二维码展示”。broadcast.html的主题是“统一入口,多点触达”。- 同目录其它页后续都按“单页单主题”处理。
SEO/合规整改、maipdfcn 架构与上传逻辑、分片实现、文件汇总与计划,以及 home 页面精修进度、Eng 英文博客与文章评审。按 Tab 分块查看。
meta name="robots" content="noindex, nofollow"、标题 “404 - Page Removed”、引导至 article.maipdf.com;PHP 文件另加 http_response_code(404) 与 X-Robots-Tag: noindex, nofollow。处理完成:上述 SEO/合规整改已全部执行并记录于本页;home 文件夹已按计划完成 id、文案、危险图片 alt 的整改;read/copy.php、read/feedback.php 已改为 noindex 404 存根。
口径:这里只统计代码里真正写出的 http/https 绝对地址,并且排除 m.maitube.com。像 admin@maitube.com 这种邮箱、SMTP 主机名这次不算在“外链”里。下面按文件夹把具体页面路径名字和命中的具体代码都记下来。
| 范围 | 命中文件数 | 说明 |
|---|---|---|
qr/ |
74 | 最多,主要集中在 qr/blog/qr、qr/grabify、qr/post 和图片/二维码旧链路。 |
file/ |
13 | 主要是 PDF 阅读器页、旧版阅读器脚本、预览/广告图片和 printback.php 接口调用。 |
6/ |
10 | 旧登录/查询/跳转页里还保留了很多绝对地址。 |
| 根目录 | 10 | 首页、上传页、工具入口页和邮件发送逻辑里还有旧绝对地址。 |
old/ |
5 | 历史阅读器和旧测试页仍保留老域名写法。 |
qr/ → file/ → 6/。
用途:记录两套上传/生成链接逻辑在验证方式与到期时间等设置上的差异,便于后续统一或排查。以下为只读分析结论(不代表已改代码)。
| 项 | maipdf2026(英文死版本) | maipdfcn.php(中文) | 备注/影响 |
|---|---|---|---|
| Telegram 验证/提醒 |
前端有 Read Alerts (Telegram):enableTelegramAlert、绑定按钮(t.me/maipdfbot)、Get chat_id、隐藏 telegram_token。后端:若 enableTelegramAlert=yes,从 mailalert 提取数字作为 chat_id。
|
无 Telegram 相关 UI/后端处理(未检出 telegram/tg/bot 等字段)。 | 英文版多一套 Telegram 绑定/通知链路(含 Worker API token/状态逻辑)。 |
| 到期时间(Expiration) |
前端:Expiration 组件(preset/custom days)、隐藏字段 expiration_day/expiration_ts、时区选择、显示 UTC/Local 到期时间。后端:支持 expiration_ts 或 expiration_day;都无则默认 2099-01-01(UTC ts=4070908800)。
|
当前表单/后端入库段未见 expiration_* 字段;主要设置为“阅读时间(password)+ 打开次数(limit)”。 |
英文版额外提供“到期时间”维度;中文版目前偏“时长+次数”。 |
| 邮箱/提醒字段 mailalert 的含义 | mailalert 被复用承载:chat_id|expiration_ts(通过拼接避免改 DB schema)。 |
mailalert 为“接收提醒的邮箱”(有简单注入字符过滤,空则默认 1998)。 |
同名字段语义不同:英文版是“复合字段”,中文版是“邮箱”。若要统一需先明确 DB 字段设计。 |
| 验证方式 | 提供 Email Verification:enableEmailValidation + emailAddresses(最多 50)。 |
提供 手机号验证(可选):enablePhoneValidation + phoneNumbers(最多 50 个 11 位手机号)。 |
两边验证体系不同:英文偏“邮箱白名单”,中文偏“手机号白名单”。 |
| 入库结构(从代码片段可见) | (未在本页展开 DB 写入细节) | 插入 pdf 表:INSERT INTO pdf VALUES(identifier, allurl, password, limit, day, mailalert, phoneNumbers)。 |
中文表结构含 phoneNumbers;英文侧若也要落库 Telegram/到期时间需考虑字段兼容(当前通过 mailalert 拼接绕开)。 |
| limit vs limitjoe(字段名差异) |
表单字段名为 limit(Number of Opens),后端取 $_POST['limit'] 并在入库时作为第 4 个值写入 pdf 表。其它查询/结果页通常读取 pdf.limitjoe(列名是 limitjoe)。
|
表单字段名同为 limit(打开次数),后端取 $_POST['limit'] 并作为第 4 个值写入 pdf 表;查询/控制逻辑同样常读取 pdf.limitjoe。
|
代码层面表单字段叫 limit,但数据库列名常见为 limitjoe(你提到的 limtjoe 应为此列名的口误)。如果两套逻辑连接的是不同数据库/不同表结构,就会出现同一概念(打开次数限制)在字段/列名映射上不一致,需要单独对齐各自的 password.php / DB schema。
|
| 登录提醒(Login Reminder) |
触发:用户首次点击上传区域 #dropz(click/pointerdown,监听带 { once: true })。频率:用 localStorage 记录 login_reminder_last_ts,若 Date.now() - lastShown < 3600000 则不再弹(冷却 1 小时)。条件:仅在页面存在且显示 #loginBtn 时弹窗(通常表示“未登录”)。
|
未见同等“登录提醒弹窗 + 1 小时冷却”逻辑(至少在本次查看的 maipdfcn.php 片段中未出现)。 | 英文死版本会对未登录用户做“上传前提示登录”的引导,且按浏览器维度 1 小时节流。 |
快速定位点:maipdf2026 后端在处理 enableTelegramAlert/expiration_ts 后把它们拼进 mailalert;maipdfcn.php 在 if(isset($_POST['limit'])) 分支中处理 mailalert(邮箱)与 phoneNumbers(可选手机号验证)。
规则:当打开次数超过 1 万(10k)后,不能开启动态水印,与「打开次数超过 1 万即按无限次阅读且不记打开统计」的逻辑一致。
实现(maipdfcn.php):
pdf 表时,仅当 limit <= 10000 且勾选动态水印时使用 waterf1 前缀;limit > 10000 时一律使用 f1,不启用水印。以下为今日在中文上传页 maipdfcn.php 上的改动汇总。
globalRedirectModalLastShown,3600000ms 冷却)。f1,前端 limit≥10000 时禁用动态水印勾选(详见上方「定置:水印与打开阅读记录逻辑」)。expiration_ts 或 expiration_day,计算到期时间戳(未选则默认 2099-01-01 UTC = 4070908800);将 邮箱|expiration_ts 合并后写入 pdf 表 mailalert 列,不改 DB 结构。读取该列时需按 | 拆分,前半为邮箱、后半为时间戳。涉及文件:maipdfcn.php、work.html(本页记录)。
目标:页面不写 PHP 业务逻辑,全部用 fetch 调 PHP 接口;表单提交改为 JS 拦截后 POST 到接口,接口返回 JSON,前端再切到第三步。
uploadedfile、文件存在、写 pdf 与 block 表,成功返回 JSON { ok, identifier, place, pdflinkshort, pdflinkfull, modifyCode },失败返回 { ok: false, error }。fileplaceSHOW、dengru、dizhi(原由页面顶部 PHP 输出);若 cookie shenfen=bad 则返回 403,前端跳转 bad.html。initAfterConfig()(原整页逻辑:表单、Dropzone、到期 UI、复制等)。第二步表单 id="formStep2",submit 时 preventDefault,fetch('api/maipdfcn_generate.php', { method:'POST', body: new FormData(form) }),成功则隐藏 section1/section2、填充第三步区域、生成二维码、window.myFunction = myFunction 供复制按钮调用。maipdfcn.html,保留旧链接兼容。});;补全 initAfterConfig 与内层 addEventListener 的闭合;Dropzone 选项对象与 new Dropzone(…) 用 }); 正确闭合。class="dropzone" 会被库自动初始化。在引入 Dropzone 后加 Dropzone.autoDiscover = false;,仅由 initAfterConfig 内 new Dropzone("#dropz", { url: UPLOAD_URL, ... }) 初始化。myFunction 定义在 initAfterConfig() 内,而按钮 onclick="myFunction()" 在全局查找。增加 window.myFunction = myFunction; 暴露到全局。下图表示当前 maipdfcn 页面结构以及如何通过 fetch 与 PHP 接口联系、返回数据。
下图只画本页主动发起的请求:maipdfcn.html 为中央节点,箭头指向被调用的 PHP。不包含 maipdfcn.php——用户若访问 maipdfcn.php 会由服务端 302 到本页,那是入口重定向,不是本页发出的请求。
log.php 联系目的:页面把 config 返回的访客 IP(dizhi)用 XHR GET 传给 log.php?pic=...,做访问打点/记录(记录谁打开了上传页);若 log 返回内容含 hot 则视为异常,前端写 localStorage shenfen=bad 并跳转 bad.html(风控)。
config、generate、验证登录:
dc + session 返回 dengru,前端据此显示「欢迎回来」或「登录使用」;前端调用:DOMContentLoaded 里 fetch('api/maipdfcn_config.php', { credentials: 'same-origin' }),拿到 JSON 后执行 initAfterConfig();返回 fileplaceSHOW、dengru、dizhi;若 403 则跳 bad.html。email、passcode,校验 userlist 表后设 $_SESSION['user'] 与 cookie dc,再 302 到 maipdfcn.html;前端:表单 action="/6/session.php" method post,登录成功后刷新页即带 cookie,config 下次返回 dengru。initAfterConfig() 里给 #formStep2 绑 submit,preventDefault 后用 fetch('api/maipdfcn_generate.php', { method:'POST', body: FormData });入参含 limit、password、sender、mailalert、expiration 等;返回 identifier、pdflinkfull、modifyCode 等,前端据此显示第三步(链接、二维码、复制按钮 myFunction)。流程简述:访问 maipdfcn.php 被重定向到 maipdfcn.html → 页面加载后 fetch config 拿到 fileplaceSHOW/dengru/dizhi → 第一步上传走 onlyupload 或 chunkupload(不变)→ 第二步提交被 JS 拦截,fetch POST 到 maipdfcn_generate.php,接口读 Cookie、写库、返回 JSON → 前端根据 JSON 显示第三步并暴露 myFunction 给复制按钮。
涉及文件:maipdfcn.html、maipdfcn.php(重定向)、api/maipdfcn_config.php、api/maipdfcn_generate.php。
下图为当前结构:第一步上传全部走 chunkupload.php,小文件整包 POST(一体化),大文件分片+断点续传;不再使用 onlyupload.php。
当前流程:上传仅用 chunkupload.php。小文件(≤5MB)一次 POST 整包,服务端按「无 action + file」走整包逻辑;大文件(>5MB)走 init/chunk/merge 分片。onlyupload.php 在 maipdfcn 流程中已不再使用。
验证登录:页内登录弹窗表单 POST 到 /6/session.php(email、passcode),校验 userlist 表后设 $_SESSION['user'] 与 cookie dc,再 302 到 maipdfcn.html。之后 api/maipdfcn_config.php 带 cookie 请求时读 dc + session,在返回的 dengru 中体现登录状态,前端据此显示「欢迎回来」或「登录使用」。
以下为当前上传与第二步生成链接的流程与约定,仅记录不改代码。
/var/www/html/pdf/yes/extra/pdf/年/月/日/(如 …/pdf/2026/02/05/)。fileplaceSHOW = "pdf/年/月/日/",由 PHP 输出到前端 fileplaceSHOW。$fileplace、$fileplaceSHOW 一致,按当前日期建子目录。url: "onlyupload.php",paramName: "file",POST 单文件。.pdf,.png,.jpg,.jpeg,.gif,image/*。.PDF(大写);文件名不能含 #;大小超约 80MB 拒绝;若文件名为 17 位且以 16458 开头则写 localStorage shenfen=bad 并跳转 bad.html。uploadedfile=success;uploadedFileNameWithPath = fileplaceSHOW + file.name(如 pdf/2026/02/05/xxx.pdf);将该值写入 #name(表单字段 sender);若服务端返回含 "Duplicate" 则 alert 提示。uploadedfile=notyet。$_FILES["file"]。pdf、htm(与前端允许的 image 等不完全一致,实际主要用 pdf)。'File beyond 2M'。$fileplace,不存在则 mkdir(0777, true)。exit('Duplicate'),不覆盖;否则 move_uploaded_file 到该路径。$picplace,质量 50、分辨率 75。echo 'nofile'。if(isset($_POST['limit'])))name="sender",即上传成功后写入 #name 的值,格式为 pdf/年/月/日/文件名.pdf。uploadedfile 非 success(未设或为 notyet),直接 exit 提示「不要重复刷新、重新进入上传」。$url = $_POST['sender'],$encryfile = '/var/www/html/pdf/yes/extra/'.$url,与 onlyupload 落盘路径一致;非 topen 等分支会 file_exists($encryfile),不存在则报错。substr($url, -3) != 'pdf' 则 exit。上传:用户用 Dropzone 选文件 → 请求 onlyupload.php → 文件落到 /var/www/html/pdf/yes/extra/pdf/年/月/日/文件名.pdf,并把 pdf/年/月/日/文件名.pdf 写入表单 sender,同时设 Cookie uploadedfile=success。生成链接:用户点第二步提交时,表单带 sender 与 limit、password、mailalert 等 POST 回 maipdfcn.php;后端校验 Cookie 为 success、/var/www/html/pdf/yes/extra/ + sender 文件存在且为 .pdf,通过后才写库、生成链接。未上传就提交或刷新导致 Cookie 为 notyet 时,后端会拒绝并提示重新进入上传。
涉及文件:maipdfcn.php(Dropzone 配置与第二步处理)、onlyupload.php。
在不改动现有代码的前提下,分析若将当前整文件上传改为分片上传会怎样,以及一种可行设计思路(仅记录到本页,不实现)。
当前:单次 POST 整文件到 onlyupload.php → move_uploaded_file 落盘 → Imagick 生成首页缩略图 → 前端收到成功后将 pdf/年/月/日/文件名.pdf 写入 sender 并设 Cookie uploadedfile=success。单请求、整文件进 PHP(受 post_max_size / upload_max_filesize 与超时限制)。
pdf/年/月/日/文件名.pdf 且 Cookie/sender 仅在「整文件就绪」后设置,这样第二步生成链接逻辑无需改。1. 约定
uploadId = md5(filename + size + 用户/会话标识) 或由服务端在「初始化」时分配并返回。/var/www/html/pdf/yes/extra/upload_tmp/,按 uploadId 建子目录或前缀,避免与最终路径混淆。2. 前端
chunkIndex(从 0 起)、totalChunks、filename、uploadId(可与后端「初始化」接口商定由谁生成)。chunkupload.php),字段含 file(当前片二进制)、chunkIndex、totalChunks、filename、uploadId。可顺序上传,也可限制并发(如 3~5)以减轻服务器压力。chunkIndex === totalChunks - 1 时自动视为完成),此时才在响应里允许前端执行「当前逻辑」:设 Cookie uploadedfile=success、把 pdf/年/月/日/文件名.pdf 写入 sender、提示成功。这样 maipdfcn 第二步提交与校验逻辑不用改。3. 服务端
chunkIndex / totalChunks / uploadId,则当作分片请求。校验 filename 后缀为 pdf、总大小 < 限制;将当前片写入临时文件,例如 upload_tmp/{uploadId}.{chunkIndex} 或先拼接到 upload_tmp/{uploadId}.part(追加写入,需锁或单线程合并)。chunkIndex === totalChunks - 1 且本片写入成功,或收到显式「完成」请求时:检查所有片齐全(或 .part 已写满预期大小),将临时文件 rename 到最终路径 pdf/yes/extra/pdf/年/月/日/文件名.pdf(与 onlyupload 一致);若目标已存在则返回 Duplicate,不覆盖;然后同现有逻辑:Imagick 生成缩略图到 picplace;返回成功(可带与现有 onlyupload 一致的文本,便于前端统一处理)。uploadId 建议与 filename/size 绑定并做简单校验,避免覆盖他人会话。4. 断点续传(可选)
uploadId 记录已收到的 chunkIndex(如存在 upload_tmp/{uploadId}.meta 或 DB)。5. 清理
upload_tmp/{uploadId}.*,需定时任务(cron)按修改时间删除超过 N 小时/天的临时文件;或在上传完成/失败时主动删当前 uploadId 的临时文件。sender = pdf/年/月/日/文件名.pdf」+ 该路径下文件存在。分片方案只要在「整文件落盘 + 缩略图生成」完成后,通过接口返回与现有 onlyupload 相同的语义(如成功时无 Duplicate 文本),前端仍执行同一套:设 Cookie、写 #name,则无需改 maipdfcn 的第二步校验与 onlyupload 的现有单次上传逻辑;可保留 onlyupload 单次上传作为小文件或兼容路径,分片走单独接口(如 chunkupload.php)或同一入口根据是否带 chunk 参数分支。以上为方案记录,未改任何代码。若实现,需再细化:片大小、uploadId 生成与校验、并发写入与锁、错误码与前端重试策略。
5.1 chunkupload.php 现状(仅分析,不改代码)
/var/www/whatstheirip/pdf/yes/extra/pdf/年/月/日/,与当前 onlyupload(/var/www/html/pdf/yes/extra/...)不一致,若要对齐 maipdfcn 需统一为同一路径。$_FILES["file"] + POST file_id, chunk_id, chunk_size, total_chunks;分片按 chunk_id 存到临时目录 sys_get_temp_dir().'/'.$file_name(以原文件名为临时目录名,同文件名会冲突)。chunks_info.json 记录 $chunks_info[$file_id][$chunk_id]=true,便于判断是否收齐。但判断「是否完成」用 count($chunks_info) 得到的是「file_id 的个数」而非「当前 file_id 下已收片数」,应改为 count($chunks_info[$file_id] ?? []) 与 total_chunks 比较。file1, file2, ... file{$i} 顺序读片并写入目标;而存片时用的是 $file_name = $chunk_id,若前端传的 chunk_id 为 "1","2" 则存成 "1","2",与合并时期望的 "file1","file2" 不一致,会导致合并读不到文件。需统一:要么存为 "file".$chunk_id,要么合并时用 $chunk_id 与存盘名一致。fopen($target_file,'wb') 写入 $fileplace.$originalfilename,之后又 move_uploaded_file($target_file, $fileplace.$originalfilename) 无意义且可能覆盖,应删除该 move。5.2 专业的分片上传 + 断点续传应怎么做
filename、filesize、chunkSize、totalChunks(可选 fileHash 做秒传/去重)。服务端:校验扩展名与总大小;生成唯一 uploadId(或用 filename+size+hash 派生);在临时目录创建 uploadId 目录或 meta 文件;返回 uploadId(及可选「已存在则返回已上传的 chunk 列表」做秒传/续传)。uploadId, chunkIndex, totalChunks, file(blob)。服务端:校验 uploadId 与 chunkIndex 范围;将片写入 tmp/uploadId/chunk.{chunkIndex} 或 uploadId.chunk.{chunkIndex};在 meta 中标记该片已收到;返回 200 或 JSON { ok: true }。同一片可幂等(重复上传同一 chunkIndex 覆盖即可)。uploadId,服务端读取 meta,返回 { received: [0,1,3,5,...] } 或 { missing: [2,4,6,...] }。前端只上传 missing 中的片,再发「完成」请求。uploadId, filename)。服务端:检查所有片齐全(或按 totalChunks 逐片检查存在);在临时路径按顺序拼接成完整文件(不要直接写到最终业务路径,避免写一半失败污染);校验拼接后大小或简单 hash(可选);若最终路径已存在则返回 Duplicate;rename 临时文件到最终路径 pdf/年/月/日/filename;生成缩略图;删除该 uploadId 的临时目录与 meta;返回成功(及与 onlyupload 一致的语义,如返回可被前端识别的成功文本或 JSON)。sender,与 maipdfcn 第二步无缝衔接。chunkupload.php 若按上述思路改造:统一路径与 onlyupload、修正完成判断与合并时的片名一致、去掉错误的 move、增加「查询已上传分片」接口与「完成」显式调用、合并先写临时再 rename 并做 Duplicate 检查,即可做成可断点续传且与现有 maipdfcn 流程兼容的专业分片上传。
以下为实际已加函数与改动摘要,便于回溯。
$fileplace / $picplace = /var/www/html/pdf/yes/extra/pdf/年/月/日/;$tmpBase = /var/www/html/pdf/yes/extra/upload_tmp/;$maxFileSize = 118097152,$allowedExts = array("pdf", "htm")。jsonOut($data) 输出 JSON 并 exit;err($msg, $code) 设置 HTTP 状态码并输出 { "error": $msg } 后 exit。filename, filesize, totalChunks, chunkSize;校验扩展名与大小;uploadId = md5(filename|filesize|date('YmdH'))(同文件同小时内可续传);创建或复用 upload_tmp/uploadId/ 与 meta.json(含 filename, filesize, totalChunks, received[]);返回 { uploadId, received }。uploadId;读取 meta,返回 { received: [] }(断点续传用)。uploadId, chunkIndex, file($_FILES["file"]);校验会话与范围;move_uploaded_file 到 tmp/uploadId/chunk.{chunkIndex};更新 meta 的 received[];返回 { received, ok }。uploadId;检查所有片齐全;在临时目录按 chunk.0, chunk.1, ... 顺序拼接为 merged.tmp;若最终路径已存在则清理临时并返回纯文本 Duplicate;否则 rename 到 $fileplace.$filename;Imagick 生成首页缩略图到 $picplace;删除该 uploadId 临时目录;返回纯文本 ok(与 onlyupload 语义一致)。CHUNK_UPLOAD_URL = "chunkupload.php",CHUNK_SIZE = 2*1024*1024(2MB/片),CHUNK_THRESHOLD = 5*1024*1024(大于 5MB 走分片)。autoProcessQueue: false;addedfile 内校验通过后按 file.size <= CHUNK_THRESHOLD 分支:小文件 dz.options.url = UPLOAD_URL; dz.uploadFile(file)(仍走 onlyupload.php),大文件调用 doChunkedUpload(dz, file)。totalChunks = Math.ceil(file.size / CHUNK_SIZE);postFormData 封装 fetch(CHUNK_UPLOAD_URL, { method:'POST', body: formData });init() 发 action=init,取 uploadId 与 received;queryChunks() 发 action=query 取已上传片;uploadChunk(index) 用 file.slice 切片并发 action=chunk;merge() 发 action=merge 并 r.text();流程为 init → queryChunks → 仅上传 received 中缺失的 index → merge;每片成功后 dz.emit('uploadprogress', file, pct, bytes);merge 返回后 dz.emit('success', file, text) / dz.emit('complete', file),失败则 dz.emit('error', file, msg)。原有 success 里设 Cookie、写 #name、判断 Duplicate 的逻辑未改。有断点续传。 逻辑如下。
uploadId = md5(filename|filesize|date('YmdH')),同一文件名、同一大小、同一小时内会得到同一 uploadId。init 时若 upload_tmp/{uploadId}/ 与 meta 已存在(例如上次传了一部分断线),会读出现有 received[] 并返回;query 按 uploadId 返回当前已收到的片号。前端只传「received 里没有的片」,再调 merge,即从断点接着传。toUpload = 所有片下标中不在 received 的,只上传 toUpload,最后 merge。当前限制
upload_tmp/{uploadId}/ 仍存在;若定时任务清理(如 cron 删超过 N 小时的目录),被清掉后无法续传。未做:刷新页面后「自动接着传」(不重新选文件)。若要做,需前端把 uploadId 存 localStorage/sessionStorage,刷新后先 query 再只传缺失片。
当前清理逻辑:
upload_tmp/{uploadId}/ 下所有 chunk 文件、meta.json,并删除目录(chunkupload.php 第 220-224 行)。action=init 开头调用 cleanOldUploadTmp($tmpBase),扫描 upload_tmp/ 下各子目录,按 meta.json 的 created 或目录 mtime 判断;若早于「今天 00:00:00」则视为昨天及更早,删除该目录下所有文件并删除目录。无需 cron,每次有人发起分片上传(init)时顺带清理。还可改进的点:
uploadId 存 localStorage,刷新后先 query 再只传缺失片。当前较先进的上传逻辑(业界常见):
涉及文件:chunkupload.php(重写 + cleanOldUploadTmp)、maipdfcn.php(分片配置与 doChunkedUpload 接入)。
用户在凌晨(如 00:31 Asia/Shanghai)上传文件,页面显示路径为当天日期,但服务器实际存储到前一天文件夹。生成链接时找不到文件,报错。
api/maipdfcn_config.php:设了 Asia/Shanghai → 前端拿到当天路径chunkupload.php:未设时区,用服务器默认(UTC)→ 存到前一天文件夹api/maipdfcn_generate.php:设了 Asia/Shanghai → 按前端传来的当天路径查找 → 找不到文件chunkupload.php:顶部加 date_default_timezone_set('Asia/Shanghai')chunkupload.php:上传成功返回值从 ok 改为 ok|{fileplaceSHOW}(服务器实际存储的相对路径)maipdfcn.html(JS):success 回调解析返回路径,自动覆盖页面加载时缓存的 fileplaceSHOW,防跨午夜边界maipdfcn.html(JS):页面打开超 30 分钟时提示刷新api/maipdfcn_generate.php:错误提示改为"找不到已上传的文件(文件名),请重新上传"原则:上传路径的唯一真相来源是 chunkupload.php,前端不自行拼路径。跨天自动校正,用户无感知。
背景:file/web/index.php 是读取链接的入口,会查 pdf 表(maipdfcn.php 写入的数据)。此前未处理「到期时间」;2026 已从 alert 列解析 邮箱|expiration_ts 并在过期时拒绝访问。本次在 index.php 中接入同一套到期逻辑。
$eAlertRaw = $row['alert'],若含 | 则 explode('|', ..., 2);第一段为邮箱/chatId 赋给 $eAlert(供 sessionStorage 等);第二段若为纯数字则 $expirationTs = (int),否则为 0。$expirationTs > 0 && $expirationTs <= time(),则 $limit = -1(不再执行 $limit - 1);否则照常 $limit = $limit - 1。后续原有「限制检查」if ($limit < 0) { ... exit($tuichu); } 会统一跳转 aftertime。file/web/2026 一致。$limit = -1);与查询条件 limitjoe > 0 一致;无到期时间时 $expirationTs = 0 不进入过期分支,行为与原来一致。UPDATE pdf SET day = ...(因该 UPDATE 在「查到行」的大分支内、到期只改了 $limit 未提前 exit)。即:过期链接被点开时,仍会更新「最后访问日」。若希望「过期后完全不更新任何记录」可在过期分支里提前 exit 或仅在未过期时执行该 UPDATE;若希望保留「有人试过打开」的统计则可维持现状。到期时间只做「提取 + 与当前时间比对」即可,无需改表结构;和 2026 对齐解析方式能减少两套入口行为不一致的风险。把「过期」统一成「视为次数已用完」(limit = -1),复用原有限制检查与跳转,改动小、易维护。若以后要区分「因次数用完」和「因到期」的提示文案,可在 $limit < 0 分支里根据是否曾解析到 $expirationTs > 0 再分支。
涉及文件:file/web/index.php。
划线 = 已改动。上方各目录列表与下方计划表中同名单据已用 标出。
meta name="robots" content="noindex, nofollow",页面保留原内容,仅禁止搜索引擎收录。f1,前端 limit≥10000 时禁用动态水印勾选(见上方「定置:水印与打开阅读记录逻辑」)。alert 解析 邮箱|expiration_ts,过期则 $limit = -1 走原有限制检查并跳转 aftertime;逻辑与 2026 一致,详见上方「file/web/index.php 到期时间逻辑与逻辑审查」。home/ 下静态 HTML 约 50+ 个,包括图中列出的 index.html, broadcast.html, bufang.html, cloudshare.html, daoqi.html, jiami.html, maipdfexamples.html, platform.html, sharepdf.html, wendang.html, showonweb.html, shareonwechat.html, portifolio.html 等,以及 likeH5.html, zihui.html, dongtai.html, sharepdf.html, teda.html, restriction.html, fangzhicopied.html 等。
id="grabify" 已改为 id="section-feature";② 文案中“追踪”“监控”“访问追踪”“跟踪”“IP地址”(营销语境)已统一改为“打开统计”“查看”“统计”“追溯”“访客标识/打开记录”;③ likeH5、zihui 的 id 与敏感句已改;waifa 标题/正文/alt 已改。| 类型 | 文件示例 | 建议 |
|---|---|---|
| 已去外链,剩 id/文案 | cloudshare, daoqi, showonweb, shareonwechat, portifolio | 可选:将 id="grabify" 改为 id="section-feature" 等中性 id;将“访问追踪”“监控谁查看了您的文档”“帮助追踪文档泄露源头”改为“打开统计”“查看谁打开了文档”“帮助定位文档泄露源头”等。 |
| 含 id="grabify" + 敏感文案 | likeH5.html, zihui.html | 同上:改 id;将“IP地址和浏览器信息将被记录,增强文件的追踪性”改为“访问者标识与打开记录将用于打开统计”等。 |
| 仅文案含追踪/监控 | sharepdf, maipdfexamples, pdftourl, teda, kongzhiwaifa, fangzhicopied, restriction, restrict, zuopinji, dongtai, wendang, broadcast, mimafangwen, designercn, shejishi, saomiao, fangzhifuzhi, sms_verify 等 | 统一措辞:“追踪”→“打开统计/追溯”;“监控”→“查看/统计”;“IP地址”在营销语境→“访客标识/打开记录”。英文页(maipdffenceview, maifilefenceview):track/monitor → 与 read 下 DRM 页一致。 |
| 无需改或低优先 | index, bufang, jiami, platform, jiali, convertQR 等 | 未检出明显敏感外链或敏感词;可最后抽查。 |
不将 home 下整页改为 404 存根;仅做文案与 id 的合规替换,保持页面可访问与 SEO。
img src、og:image、twitter:image 目前均为 maipdf.com(如 https://maipdf.com/pictures/MaiFile/head.png、result.png、cnresult.png、body.png、jietu%20.png、setting2025.png 等),无 grabify/iplogger/doc.maitube 等外链。若今后发现第三方或旧域名图片,需改为 maipdf.com 或本站可控地址。alt="文件外发跟踪示意图" → alt="文件外发打开统计示意图"。其余 home 页若出现“跟踪/追踪”类 alt 可同样替换。根目录:copy.php, feedback.php, freeOnlineDRMprotection.html, image.php, lianjie.html, nicetool.html, preventsharingdownloading.html, shareonlinepdfwithDRMprotection.html, three.html, wxback.php
子目录:pdf/, pic/, salesvector/
| 状态 | 文件 | 说明 |
|---|---|---|
| 已处理 | og:image、canonical 已去掉 grabify/iplogger,无需再动。 | |
| 已处理 | Track/Monitor/IP address 已改为打开统计、审计、visitor ID。 | |
| 已处理 | “Use Watermarking for Tracking”“IP address”“access tracking”“Track Document Activity”“monitor who is interacting”“Track when and where” → 同上替换。 | |
| 已处理 | 已替换为 article.maipdf.com 引导页。 | |
| 已处理 | “追踪记录” → “打开统计”。 | |
| 已处理 | “追踪记录” → “打开统计”(与 lianjie.html 一致)。 | |
| 已处理 | “IP address as your watermark” → “Visitor ID as your watermark”。 | |
| 无需改 | copy.php, feedback.php, image.php, three.html, wxback.php, read/pdf/ | 未检出 grabify/iplogger/whatstheirip、tracking/追踪等敏感词。 |
| 避免 | 改用 |
|---|---|
| track / tracking / monitor / 追踪 / 监控 / 获取IP / IP address(营销文案中) | 打开统计、访问统计、审计记录、audit trails、访客标识 |
以下文件已统一将“访问记录”改为“打开统计”(statistic 表述):
read 文件夹内:无。 三篇英文 DRM 页(freeOnlineDRMprotection、shareonlinepdfwithDRMprotection、preventsharingdownloading)是 MaiPDF 产品/知识介绍,仅少量措辞涉及 track/monitor,已改;无需做 404/noindex。若以后发现整页以“IP 追踪/抓取”为主题的页面,可考虑替换为 Page Removed + noindex 或 404。
| 页面 | 图片 URL |
|---|---|
| freeOnlineDRMprotection.html | https://maipdf.com/pictures/MaiPDF/sett.png |
| shareonlinepdfwithDRMprotection.html | https://maipdf.com/pictures/MaiPDF/enresult.png |
| preventsharingdownloading.html | https://maipdf.com/pictures/MaiPDF/enresult.png |
| lianjie.html | https://doc.maitube.club/js/img/online/home-pdf.png, 2nd home.png, 上传.png, 设置.png, 二维码.png, jietu .png, jietu.png, 结果.png, 修改.png;offline/ offhome.png, offshijian.png, 下载.png, jietu.png, 限制.png, 更新.png |
| pic/56.html | 同上 + https://doc.maitube.com/read/pic/new-with-alert.png |
| nicetool.html | https://doc.maitube.com/read/pic/money.png |
| pic/js.html | https://mai.maitube.club/read/pic/mouse.png, key.png |
建议在浏览器中打开各页,或用 curl/工具逐条请求上述 URL 确认返回 200;若 doc.maitube.club / mai.maitube.club 失效可考虑迁到本站或 CDN。
以下为本次 SEO/合规整改中尚未修改的文件,仅记录路径,供之后逐项查看是否需 noindex、改文案或其它处理。路径相对于 /var/www/html/。
| # | 文件路径 | 备注 |
|---|---|---|
| 1 | chunkupload.php | Root |
| 2 | etest.php | Root |
| 3 | getresult.html | Root |
| 4 | haha.php | Root(6 下 haha.php 已改外链) |
| 5 | hahachange.php | Root |
| 6 | hanyu.php | Root |
| 7 | home.php | Root(已作废,301→home/index.html) |
| 8 | indexpay.php | Root |
| 9 | log.php | Root |
| 10 | map.html | Root |
| 11 | notify.php | Root |
| 12 | offlinechange.php | Root |
| 13 | onlyupload.php | Root |
| 14 | password.php | Root |
| 15 | pdfonline.html | Root |
| 16 | printback.php | Root |
| 17 | privnote_video_request.html | Root |
| 18 | query_log.php | Root |
| 19 | re.php | Root |
| 20 | result.php | Root |
| 21 | security_config.php | Root |
| 22 | sendemail.php | Root |
| 23 | SMStencenct.php | Root |
| 24 | sunwen.html | Root |
| 25 | tab.html | Root |
| 26 | watermark.html | Root |
| 27 | yanhuo.php | Root |
| 28 | 6/1.php | 6 |
| 29 | 6/change.php | 6 |
| 30 | 6/change2.php | 6 |
| 31 | 6/change2025.php | 6 |
| 32 | 6/confirm.php | 6 |
| 33 | 6/generate_modcode.php | 6 |
| 34 | 6/list copy.php | 6 |
| 35 | 6/list.php | 6 |
| 36 | 6/list2.php | 6 |
| 37 | 6/listtemp.php | 6 |
| 38 | 6/listview.php | 6 |
| 39 | 6/login.php | 6 |
| 40 | 6/old-login.php | 6 |
| 41 | 6/register.php | 6 |
| 42 | 6/resetpassword.html | 6 |
| 43 | 6/result.php | 6 |
| 44 | 6/session.php | 6 |
| 45 | 6/t2.php | 6 |
| 46 | 6/tencentsms.php | 6 |
| 47 | file/777777777777.php | file |
| 48 | file/aftertime.html | file |
| 49 | file/index.php | file |
| 50 | file/index316.php | file |
| 51 | file/indexBackupDirect.php | file |
| 52 | file/read.html | file |
| 53 | file/readNONEENCRYT.html | file |
| 54 | file/sms.html | file |
| 55 | file/smsout.php | file |
| 56 | file/verify.php | file |
| 57 | file/web/1.html | file/web |
| 58 | file/web/index.php | 已改:到期时间解析与比对(见上方记录) |
| 59 | file/web/indexBackupDirect.php | file/web |
| 60 | file/web/test.php | file/web |
| 61 | file/web/viewer.html | file/web |
| 62 | home/index.html | 已查看,无敏感外链/敏感词,无需改 |
| 63 | home/bufang.html | home |
| 64 | home/jiami.html | home |
| 65 | home/platform.html | home |
| 66 | home/convertQR.html | home |
| 67 | home/jiali.html | home |
| 68 | home/jinzhi.html | home |
| 69 | home/keycode.html | home |
| 70 | home/kongzhi.html | home |
| 71 | home/lianjiepdf.html | home |
| 72 | home/liulan.html | home |
| 73 | home/maifileormaipdf.html | home |
| 74 | home/maipdf_strong _protection.html | home |
| 75 | home/pengyouquan.html | home |
| 76 | home/pingtaishuoming.html | home |
| 77 | home/prevent_downloading_maipdf.html | home |
| 78 | home/preventbeingcopied.html | home |
| 79 | home/preventcopy.html | home |
| 80 | home/prevention.html | home |
| 81 | home/preventmaipdf.html | home |
| 82 | home/share_pdf_securely.html | home |
| 83 | home/showpdfonline.html | home |
| 84 | home/whichone.html | home |
| 85 | home/encryptCN.html | home |
| 86 | pdf/hahachange.php | |
| 87 | pdf/web/viewer.html | pdf/web |
| 88 | qr/bad.html | qr |
| 89 | qr/file2.php | qr |
| 90 | qr/file22.php | qr |
| 91 | qr/file3.php | qr |
| 92 | qr/index.php | qr |
| 93 | qr/maiguaQR.html | qr |
| 94 | qr/mass.php | qr |
| 95 | qr/pdfjs.php | qr |
| 96 | qr/qrcode.php | qr |
| 97 | qr/qrsess.php | qr |
| 98 | qr/re.php | qr |
| 99 | qr/scanimg.php | qr |
| 100 | qr/sunwen.html | qr |
| 101 | qr/upload.php | qr |
| 102 | qr/blog/qr/ | 目录:除已改 8 个危险文件名外,其余 .html 未改(如 1.html~999.html、MaiPDF介绍.html 等) |
| 103 | qr/grabify/index.html | qr/grabify(含 tracking 脚本,难搞) |
| 104 | qr/grabify/qr.php | qr/grabify |
| 105 | qr/grabify/qrcode.php | qr/grabify |
| 106 | read/image.php | read |
| 107 | read/three.html | read |
| 108 | read/wxback.php | read |
| 109 | read/pdf/ | 目录:index.php, image.php 等 |
| 110 | read/salesvector/ | 目录:index.php/ba.php 文案已改;ba.js, ip.js, maipdfcn.php 等未改 |
上表路径均相对于站点根目录 /var/www/html/。查看时可按路径逐项打开,确认是否需 noindex、改外链/文案或其它处理。
6/list.php 列表主数据来源是 block 表,不是直接从 pdf 表拉取。block 表里维护;pdf 更偏向文件控制参数(次数、时长、提醒、生成日期等)。pdf 不同步 block,列表展示和排序可能出现你看到的“看起来不一致”。原 home/work.html 已并入本页并删除。当前验收标准以 home/convertQR.html 为准,其余页面继续逐页精修并做手机端适配。
home/convertQR.html备注:未完成页面将按 convertQR 的内容结构、中文口径和移动端可读性标准逐页验收。
涉及文件:home/maifilefenceview.html、home/maipdffenceview.html
麦瓜PDF/宣传图/fenceview.png(含 og:image / twitter:image)每一页必须先回答“这页到底讲什么”。主题确定后,再决定标题、流程图、截图和文案,不允许直接复制上一页结构换字。
convertQR.html 的主题是“PDF 生成二维码展示”。broadcast.html 的主题是“统一入口,多点触达”。首屏不能写行业黑话,也不能把英文文件名直接拿来当产品标题。先讲动作和结果,再讲原理。
图片不是为了铺满页面,而是为了证明步骤、场景和结果。上屏图片只能放有解释价值的内容。
home/麦瓜PDF/ 最新素材。这次已经验证过:首屏如果左边短、右边长,或者右边流程图过高,观感会立刻变差。后续统一做紧凑首屏。
页面骨架可以复用,内容表达不能复用。后续每页沿用同一套阅读顺序,但每个模块都要重写成对应主题。
后续每页在桌面端成型时,就同时考虑手机端,不能桌面写完再硬压缩。
执行原则:逐页精修,用户确认一页,再进入下一页;未确认前不把状态改成“已完成”。
| 文件 | 状态 | 日期 | 执行说明 | 图片来源 |
|---|---|---|---|---|
broadcast.html | 已完成 | 2026-03-20 | 已重写为多渠道分发指南(微信群/海报展会/邮件/门店4渠道场景+做法+注意+渠道对比表+和lianjiepdf区别+边界) | home/麦瓜PDF/(截图 + 宣传图) |
bufang.html | 已完成 | 2026-03-20 | 已重写为防盗版专题(4种风险+对应手段+文件重要性防护组合表+诚实边界:截图/创意参考/技术绕过/功能叠加) | home/麦瓜PDF/(截图 + 宣传图) |
cloudshare.html | 已完成 | 2026-03-06 13:57 | 已按云分享主题精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
convertQR.html | 已完成 | 2026-03-20 | 已重写为二维码实用指南(4线下场景+尺寸距离表+1/10法则+统计数据+FAQ) | home/麦瓜PDF/(截图 + 宣传图) |
daoqi.html | 已完成 | 2026-03-20 | 已重写为到期控制专题(到期vs自毁vs次数vs验证对比表+投标/限时报价/培训/季度促销4场景+到期后3种处理方式+边界) | home/麦瓜PDF/(截图 + 宣传图) |
designercn.html | 已完成 | 2026-03-20 | 已重写为设计师作品集专题(面试投递/客户提案/案例预览/改稿更新4场景 + 直接发文件vs受控链接 + FenceView不适合设计稿 + 边界说明) | home/麦瓜PDF/(截图 + 宣传图) |
dongtai.html | 已完成 | 2026-03-19 | 已重写为动态水印专题(水印内容/位置/时机、追溯威慑、搭配建议、边界说明) | home/麦瓜PDF/(截图 + 宣传图) |
encryptCN.html | 已完成 | 2026-03-20 | 已重写为加密验证层次专题(入口加密vs附件加密区分 + 5层验证:口令/手机/邮箱/到期/次数 + 3问定方案 + 边界说明) | home/麦瓜PDF/(截图 + 宣传图) |
fangzhicopied.html | 已完成 | 2026-03-19 | 已重写为防抄走专题(四种风险拆解:摘抄/截图/转发/留存,对应手段+边界) | home/麦瓜PDF/(截图 + 宣传图) |
fangzhifuzhi.html | 已完成 | 2026-03-19 | 已重写为防复制专题(4种复制形式拆解 + 对照表:文字选中/截图/摘抄/下载各挡哪种) | home/麦瓜PDF/(截图 + 宣传图) |
index.html | 未完成 | - | 待按 convertQR 标准精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
jiali.html | 已完成 | 2026-03-19 | 已按家庭资料分享主题重写(家庭相册、作业留档、亲友共享、家电说明书等真实场景) | home/麦瓜PDF/(截图 + 宣传图) |
jiami.html | 已完成 | 2026-03-06 14:11 | 已按加密验证主题精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
jinzhi.html | 已完成 | 2026-03-19 | 已重写为禁止下载+复制专题(三件事区分 + 浏览器/手机端对照表 + 受控阅读vs直接发文件对比) | home/麦瓜PDF/(截图 + 宣传图) |
keycode.html | 已完成 | 2026-03-20 | 已重写为访问码专题(怎么设/怎么发/怎么改流程 + 码和链接分开发 + 访问码vs手机vs邮箱对比表 + 轻门槛定位 + 边界说明) | home/麦瓜PDF/(截图 + 宣传图) |
kongzhi.html | 已完成 | 2026-03-19 | 已重写为访问控制专题(5级权限对比表:公开/口令/手机/邮箱/白名单 + 到期/次数 + 搭配水印) | home/麦瓜PDF/(截图 + 宣传图) |
kongzhiwaifa.html | 未完成 | - | 待按 convertQR 标准精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
lianjiepdf.html | 已完成 | 2026-03-20 | 已重写为渠道使用指南(邮件/微信企微/网页3渠道做法+好处+注意+和pdftourl区别+FAQ) | home/麦瓜PDF/(截图 + 宣传图) |
likeH5.html | 已完成 | 2026-03-20 | 已重写为在线展示页专题(传播前后VS对比+6项具体收益+PDF展示页vsH5工具对比表+边界说明) | home/麦瓜PDF/(截图 + 宣传图) |
liulan.html | 已完成 | 2026-03-20 | 已重写为在线浏览vs在线查看vs转链接区分页(对比表+3场景类型+4卡片近义词区分+边界) | home/麦瓜PDF/(截图 + 宣传图) |
maifilefenceview.html | 未完成 | - | 待按 convertQR 标准精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
maifileormaipdf.html | 已完成 | 2026-03-11 | 已恢复为平台选择主题,讲国际/中国大陆入口差异及 Cloudflare R2 / 腾讯云服务器存储(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
maipdf_strong _protection.html | 已完成 | 2026-03-19 | 已按强保护主题重写(五层机制拆解、标准 vs 强保护对比、升级场景、边界说明) | home/麦瓜PDF/(截图 + 宣传图) |
maipdfexamples.html | 已完成 | 2026-03-20 | 已重写为保护方法对比页(9种方法总表:解决问题/优点/缺点/场景 + 4种常见组合推荐 + 共同边界说明) | home/麦瓜PDF/(截图 + 宣传图) |
maipdffenceview.html | 未完成 | - | 待按 convertQR 标准精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
mimafangwen.html | 已完成 | 2026-03-06 14:55 | 已按密码访问主题精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
pdftourl.html | 已完成 | 2026-03-20 | 已重写为概念理解页(附件思维vs入口思维VS对比+6项转换后能力+4个相关术语关系图+边界) | home/麦瓜PDF/(截图 + 宣传图) |
pengyouquan.html | 已完成 | 2026-03-06 15:28 | 已按朋友圈展示主题精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
pingtaishuoming.html | 已完成 | 2026-03-11 | 已恢复为平台说明主题,讲平台能力、入口选择与基本流程(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
houtaishuoming.html | 已完成 | 2026-03-11 | 由原 pingtaishuoming 拆分为后台使用说明页,保留后台导览与排查逻辑(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
platform.html | 已完成 | 2026-03-06 14:27 | 已按平台说明主题精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
portifolio.html | 未完成 | - | 待按 convertQR 标准精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
prevent_downloading_maipdf.html | 未完成 | - | 待按 convertQR 标准精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
preventbeingcopied.html | 已完成 | 2026-03-20 | 二次重写:四层防护(L1-L4)、链式反应表、5类高风险资料策略、检查清单、4个常见误区、与preventcopy/restriction区分段、边界说明。~2860字3图+1SVG10节 | home/麦瓜PDF/(截图 + 宣传图 + flowchart) |
preventcopy.html | 已完成 | 2026-03-11 | 已按“防复制 PDF 内容”主题重写(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
prevention.html | 已完成 | 2026-03-11 | 已按“防复制 / 防转发 / 防扩散”主题重写(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
preventmaipdf.html | 未完成 | - | 待按 convertQR 标准精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
restrict.html | 已完成 | 2026-03-11 | 已按“给发出去的 PDF 加限制”主题重写(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
restriction.html | 已完成 | 2026-03-11 | 已按“PDF 访问限制说明与规则选择”主题重写(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
saomiao.html | 未完成 | - | 待按 convertQR 标准精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
share_pdf_securely.html | 已完成 | 2026-03-06 14:44 | 已按安全分享主题精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
shareonwechat.html | 已完成 | 2026-03-06 14:55 | 已按微信分享主题精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
sharepdf.html | 已完成 | 2026-03-06 14:27 | 已按 PDF 分享主题精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
shejishi.html | 未完成 | - | 待按 convertQR 标准精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
showonweb.html | 未完成 | - | 待按 convertQR 标准精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
showpdfonline.html | 未完成 | - | 待按 convertQR 标准精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
sms_verify.html | 已完成 | 2026-03-06 14:44 | 已按短信验证主题精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
teda.html | 未完成 | - | 待按 convertQR 标准精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
waifa.html | 已完成 | 2026-03-20 | 二次重写:6步外发时间线、有控制vs无控制对比表、4类场景策略、与cloudshare/restrict区分段、边界说明、4FAQ。~1950字3图+1SVG8节 | home/麦瓜PDF/(截图 + 宣传图 + flowchart) |
wendang.html | 已完成 | 2026-03-20 | 二次重写:搬运vs管理对比表、5种散落方式、6步生命周期、权限三档、版本替换vs重发、4类文档场景、与showpdfonline/waifa/cloudshare区分段、边界说明、4FAQ。~2950字4图+2SVG9节 | home/麦瓜PDF/(截图 + 宣传图 + flowchart) |
whichone.html | 已完成 | 2026-03-11 | 已恢复为“MaiFile vs MaiPDF 怎么选”的选择指南主题(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
zihui.html | 已完成 | 2026-03-06 13:57 | 已按自毁设置主题精修(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
zuopinji.html | 已完成 | 2026-03-11 | 已恢复为“作品集分享与外发控制”主题(含手机端) | home/麦瓜PDF/(截图 + 宣传图) |
这份表格用于你逐页精修 home 下文章。精修完成后在“日期”列填写最新日期即可。
| 文件 | 总评 | 内容 | 易懂 | AI | 模板 | 批量 | 问题 | 修改意见 | 日期 |
|---|---|---|---|---|---|---|---|---|---|
maifilefenceview.html | 45 | 56 | 69 | 91 | 98 | 97 | 查看和 `maipdffenceview.html` 几乎是同页,除了名字几乎没有真正差异;而且 FenceView 作为更重保护方式,本应解释得更细,结果正文仍是通用展示稿。 | 查看把 FenceView 的定位写清楚并放到更靠前的位置:它是增强防截图的阅读模式(页面覆盖竖向“栅栏/围栏”效果,悬停局部更清楚),用于干扰随手截图与转发,提高截图成本,属于“hamper / hinder / adds an extra layer of protection”,不是数学意义的绝对禁止截图。然后再明确 FenceView 与“标准防护”“开放打印和下载”的差别、适用资料与阅读成本;不要再用一整套通用二维码展示模板硬套;和近重复页面做合并或重新定位。 | 2026-03-19 |
maipdffenceview.html | 45 | 56 | 69 | 91 | 98 | 97 | 查看和 `maifilefenceview.html` 近乎重复,且内容仍没讲透栅栏阅读为什么“更重”。看完整页,用户对功能还是停留在一个抽象印象上。 | 查看先用一句话讲清 FenceView:围栏式遮挡 + 悬停阅读,增强在线阅读时的防截图效果(提高截图成本、降低随手传播便利性)。再突出栅栏效果、适用场景和阅读成本;说明它为何适合高敏感资料;和近重复页做明显拆分或合并。 | 2026-03-19 |
maipdf_strong _protection.html | 46 | 56 | 69 | 90 | 97 | 96 | 查看“强保护”听起来很有力度,但正文仍是标准展示模板,保护强在哪、比普通保护多了什么并不清楚。标题和正文支撑力度不匹配。 | 查看把强保护拆成具体机制组合;说明普通限制不够时为什么要升级;减少泛化展示语句,增强功能边界说明。 | 2026-03-19 |
jiali.html | 47 | 53 | 72 | 90 | 97 | 96 | 查看家庭资料分享这个题目本来可以很生活化,但正文还是标准展示模板,连场景气质都不对,读起来像把商业资料页直接换了标题。批量生成感非常强。 | 查看围绕家庭相册、作业留档、亲友共享、家电说明书这些真实场景重写;用更口语化的表达,不要再套“投放、复盘、策略”一类商务词;删掉明显不适合家庭场景的段落。 | 2026-03-19 |
dongtai.html | 48 | 56 | 70 | 89 | 96 | 95 | 查看动态水印是一个很具体的能力,但正文还是泛化成“扫码展示 + 受控入口”,核心价值没有被讲清。读者知道可以上传 PDF,却不明白动态水印到底解决什么、适合什么强度的防护。 | 查看单独解释水印显示内容、位置、时机和威慑作用;补充截图、转发、内部资料追溯等使用场景;把通用展示语句压缩,突出动态水印的独特性。 | 2026-03-19 |
fangzhicopied.html | 48 | 56 | 69 | 89 | 96 | 95 | 查看主题是“减少被抄走和二次传播”,但正文仍是标准展示型三步,风险描述和解决手段没有一一对应。读者会觉得概念对,但写法太空、太像批量改词。 | 查看把“摘抄、截图、转发、长期留存”拆开讲;对应说明动态水印、访问限制、到期、验证分别能降低什么风险;少用泛化词,多给真实业务例子。 | 2026-03-19 |
fangzhifuzhi.html | 48 | 56 | 70 | 89 | 96 | 95 | 查看主题比“防复制”更具体,但内容还是在重复上传、生成入口、按场景套模板,核心问题没有真正落到“复制发生在哪、怎么降低复制便利性”。整体模板味很重。 | 查看补充文字复制、表格复制、报价摘录这几种最常见情况;明确哪些设置只是提高门槛、哪些不能绝对防复制;用更短更像产品说明的句子替换大段套话。 | 2026-03-19 |
jinzhi.html | 48 | 56 | 70 | 89 | 96 | 95 | 查看主题是“禁止下载和复制”,但正文大部分还是通用展示稿,真正的边界控制、用户感知变化、和普通在线查看的区别没有写透。像是功能名很具体,正文却没跟上。 | 查看补“禁止下载”“降低复制便利性”“只是在线阅读”三者区别;增加浏览器端和移动端体验差异;减少和通用展示模板重复的段落。 | 2026-03-19 |
kongzhi.html | 48 | 55 | 71 | 89 | 96 | 95 | 查看标题很聚焦“控制谁能打开”,但正文仍是“上传 PDF - 生成二维码 - 放到展示位”的一套模板,主题和内容耦合不够。读者能看流程,不能真正理解“控制对象”的方法。 | 查看把对象控制拆成公开、口令、短信、登录、到期几个层级;用“谁能看、谁不能看”做对照;少写泛用展示场景,多写权限边界。 | 2026-03-19 |
kongzhiwaifa.html | 48 | 55 | 70 | 89 | 96 | 95 | 查看外发控制是个很强的题,但正文还是通用展示型模板,标题里的“发给谁、能看多久、看几次”并没有被展开到位。整体像批量生产的同模版页。 | 查看直接围绕对象、时长、次数三条主线重写;把“外发控制”与“云分享/加密/到期”之间的关系讲清;保留少量步骤,增加判断逻辑。 | - |
designercn.html | 49✅ | 55 | 72 | 88 | 96 | 95 | 查看标题写的是设计师作品集和提案分享,但正文仍是通用扫码展示逻辑,连场景举例都更像展会、培训、销售资料,行业贴合度很弱。AI 换题不换结构的痕迹比较明显。 | 查看改成围绕面试投递、客户提案、案例预览、改稿更新来写;补充作品集改版、客户转发、视觉防抄袭这些设计师真实痛点;删掉泛用的展示模板段落。 | 2026-03-20 |
keycode.html | 49✅ | 57 | 72 | 88 | 96 | 95 | 查看访问码本该是一个很适合展开的轻量门槛场景,但正文仍是标准三步和展示场景,缺少“码怎么发、怎么改、和链接怎么分开”的核心说明。换词痕迹明显。 | 查看把访问码使用流程讲清楚;补充适合报价单、样稿、小范围外发的例子;用“轻门槛”而不是“泛安全”去组织全文。 | 2026-03-20 |
maipdfexamples.html | 49✅ | 57 | 72 | 89 | 96 | 95 | 查看标题说“常见做法”,理论上很适合做方法比较,但正文仍是通用展示页逻辑,没有真正把几种做法并列比较。读者看到标题会期待方法总结,看到正文却还是模板稿。 | 查看改成“方法对比页”,把防下载、防复制、验证、到期分开列;用表格讲优缺点;删掉重复的展示型段落。 | 2026-03-20 |
encryptCN.html | 50✅ | 57 | 71 | 88 | 96 | 95 | 查看标题写“加密分享”,但正文仍沿用二维码展示模板,真正的加密方式、验证层级、和附件密码的区别都没有展开。像是把通用稿里几个关键词替换成“加密”后直接上线。 | 查看拆成口令、短信、登录、到期、次数几个层次来讲;说明“入口加密”和“附件加密”的差异;补充什么资料适合轻加密、什么资料要上重验证。 | 2026-03-20 |
liulan.html | 52✅ | 59 | 76 | 87 | 96 | 95 | 查看在线浏览这个题目和模板内容还算搭,但整页还是高度同质化,很多表达可直接替换到其它“在线看”页面。问题不在不能读,而在缺乏区分度。 | 查看把“在线浏览”和“在线查看、网页展示、转链接”的差异说清;增加临时预览、文档查阅、客服资料这类专属场景;精简重复模板。 | 2026-03-20 |
lianjiepdf.html | 53✅ | 60 | 78 | 87 | 97 | 96 | 查看主题对路,用户也容易懂,但和 `pdftourl.html` 几乎是同文改题,内部结构、案例、流程图基本重复。单页可读,放到整个目录里会显得内容库存太像。 | 查看要么和 `pdftourl.html` 合并,要么明确区分一个偏“链接分享”、一个偏“附件转入口”;补邮件、聊天、网页嵌入这类差异化场景。 | 2026-03-20 |
pdftourl.html | 53✅ | 60 | 78 | 87 | 97 | 96 | 查看就单页来说可读,但和 `lianjiepdf.html` 相似度极高,几乎只有标题和少量词汇不同。放在同一目录里,很容易让人觉得是在批量铺量。 | 查看和 `lianjiepdf.html` 做去重处理;补“转链接”和“云分享 / 在线分享 / 在线查看”的边界;增加发邮件、发微信、嵌网站时的使用区别。 | 2026-03-20 |
convertQR.html | 54✅ | 60 | 78 | 86 | 95 | 94 | 查看主题本身明确,但正文几乎就是通用“二维码展示”模板,步骤、场景和复盘段落和一大批页面高度一致,像先搭骨架再替换标题。读者能看懂“怎么做”,但很难感觉这篇是专门为“PDF生成二维码展示”认真写的。 | 查看补充二维码尺寸、扫码距离、海报摆放、线下统计这类专属细节;减少和其它展示页重复的 A/B/C/D 场景;把“生成二维码”和“展示效果优化”讲得更像实操指南。 | 2026-03-20 |
bufang.html | 64✅ | 73 | 68 | 70 | 88 | 87 | 查看主题是“PDF防盗版”,但页面里大量是安全感、控制感、分发感的泛化表达,真正用户最关心的“防什么、怎么防、场景是什么、边界在哪里”讲得不够直白。模板味比内容味更重,像批量生成后稍微换词。 | 查看先把“发出去不等于失控”这个核心问题写清楚;减少抽象的“控制/安全/治理”话术;补充具体场景,如作品集、方案书、报价单;把功能和收益一一对应,不要只说概念。 | 2026-03-20 |
broadcast.html | 69✅ | 78 | 72 | 61 | 84 | 82 | 查看信息很多,但块太多、术语感重,读者容易看花;像“统一二维码入口、投放后继续控制、复盘效果”这些点是对的,但叙述方式偏模板化,视觉结构和同目录很多页会高度相似。存在明显“先套版再换主题”的痕迹。 | 查看压缩模块数量,去掉重复的价值表达;把“多渠道分发”的真实场景写具体,比如微信群、海报、门店、邮件分别解决什么问题;少用泛化词,多用结果导向句子。 | 2026-03-20 |
restrict.html | 69✅ | 58 | 81 | 49 | 43 | 41 | 查看读起来很快,但也确实偏薄,更像一个提示卡片,而不是完整文章。好处是直白,缺点是深度和区分度不够。 | 查看把四类限制分别配上适合场景;加一张“资料类型 -> 建议限制”的小表;增强和 `restriction.html` 的差异。 | 2026-03-20 |
daoqi.html | 70✅ | 76 | 76 | 60 | 82 | 79 | 查看比通用模板页好,至少“到期控制”这个主题讲得比较集中,也有长期有效和到期停看的对照;但整页还是偏平台话术,很多内容可迁移到别的限制页,个性还不够强。 | 查看把“到期”和“自毁、次数限制、验证”之间的区别讲透;补充投标、限时报价、培训资料结束后的具体处理方式;减少重复的“发出去后还能管”表达。 | 2026-03-20 |
likeH5.html | 71✅ | 74 | 78 | 63 | 74 | 72 | 查看“像 H5 一样”这个切法还算有传播感,手机端语境也比较明确;但部分内容仍偏概念化,容易在“宣传页感”和“具体能做什么”之间摇摆,解释略绕。 | 查看直接定义用户能得到什么,比如封面、首屏、引导动作、后续替换;多给传播前后对比;少用“像 H5”反复描述,多讲实际体验。 | 2026-03-20 |
restriction.html | 71✅ | 60 | 80 | 47 | 41 | 39 | 查看相比 `restrict.html` 更像“怎么选规则”的说明页,方向更合理;但仍然较短,也还不够把场景选择讲透。 | 查看补一个简易决策树;加入常见误选案例;把“不是所有文件都该用同一套限制”展开成更明确的判断方法。 | 2026-03-20 |
zihui.html | 71 | 77 | 77 | 58 | 79 | 76 | 查看自毁设置这个题比较有吸引力,内容也比模板页更成体系;但它和 `daoqi.html` 的重合很高,且部分结构仍能看出统一生产的痕迹。 | 查看把“到期停看”和“限时限次自毁”做清晰区分;补合并使用的建议;减少与到期控制页重复的价值表达。 | - |
cloudshare.html | 72 | 80 | 75 | 58 | 83 | 80 | 查看比前两篇稍好,因为“云分享链接”这个主题本身更容易展开,内容也比较完整;但整体仍然能看出模板结构高度复用,很多 section 只是换了标题。用户能大概看懂,但不会觉得这篇是专门为这个问题认真写的。 | 查看保留“发一个链接,后续还能继续管理”的主轴;减少重复版块;把“为什么不直接发原文件”单独讲透;用更短、更像产品文章的句子替换模板化长句。 | - |
waifa.html | 72→重写 | 61 | 78 | 46 | 39 | 37 | 查看已二次重写(2026-03-20):6步外发时间线、对比表、4类场景策略、与cloudshare/restrict区分、边界说明。~1950字,8节,3图+1SVG。待重新评分。 | 查看已执行:升级为框架页,围绕时间线展开,增加场景策略和差异化段落。 | 2026-03-20 |
wendang.html | 72→重写 | 60 | 79 | 45 | 38 | 36 | 查看已二次重写(2026-03-20):搬运vs管理对比表、5种散落方式、6步生命周期、权限三档、版本替换vs重发、4类文档场景、与showpdfonline/waifa/cloudshare区分、边界说明。~2950字,9节,4图+2SVG。待重新评分。 | 查看已执行:补了具体场景(SOP/手册/培训/报价)、搬运vs管理对比、生命周期时间线、权限分级表。 | 2026-03-20 |
preventbeingcopied.html | 73→重写 | 63 | 77 | 48 | 41 | 39 | 查看已二次重写(2026-03-20):链式反应表、四层防护(L1-L4)、5类高风险资料策略、检查清单、4个常见误区+警告框、与preventcopy/restriction区分、边界说明。~2860字,10节,3图+1SVG。待重新评分。 | 查看已执行:补了链式反应分析、四层递进防护、5类资料具体设置、检查清单、4个误区纠正、边界声明。 | 2026-03-20 |
showonweb.html | 73 | 73 | 79 | 58 | 63 | 60 | 查看把 PDF 放到网页上展示这个话题有价值,但正文更多停留在“生成入口、让人在线看”,对网站嵌入、落地页承接、CTA、访客路径讲得还不够具体。 | 查看增加网页入口放在哪里、适合什么页面、怎么写按钮文案;补和“在线查看”页的差异;加入网站场景的转化思路。 | - |
portifolio.html | 74 | 76 | 80 | 58 | 66 | 63 | 查看作品集提交和发送的场景写得比较完整,也比纯模板页更贴近真实使用;但整体仍有明显套版痕迹,很多句式和其它页面很像,且和 `zuopinji.html`、`shejishi.html` 重叠不少。 | 查看突出“提交”这一动作,围绕投递、简历、客户发送来写;减少反复出现的“统一入口”表达;可以和其它作品集页做职能拆分。 | - |
prevention.html | 74 | 64 | 78 | 47 | 40 | 38 | 查看相比 `preventcopy.html`,这篇更偏“防扩散思路”,但两者仍有不少内容互相覆盖。整体可读,但容易让用户觉得在看同一篇的不同改写版。 | 查看强化“复制”与“扩散”的差别;把它做成更偏传播链路的控制页;减少和相邻页面的同义表达。 | - |
saomiao.html | 74 | 75 | 80 | 56 | 63 | 60 | 查看扫描件后续怎么处理这个主题挺实用,也比通用模板更贴近流程;但在扫描件特有的问题上写得还不够深,比如清晰度、歪斜、OCR、体积等都还能再展开。 | 查看补扫描件上传前后要做的优化;讲清楚扫描件为什么更适合统一入口;增加对手机拍照扫描和纸质档案场景的区分。 | - |
showpdfonline.html | 74 | 71 | 81 | 57 | 61 | 58 | 查看在线查看这个主题用户一眼能懂,整页也比较顺;但它和 `liulan.html`、`showonweb.html` 的边界不够清楚,单独看没问题,放一起显得有点重复建设。 | 查看把“在线查看”的核心收益收紧到“点开即看、不先下载”;用对照说明和其它相近页的差别;删减重复场景描述。 | - |
preventcopy.html | 75 | 65 | 79 | 46 | 39 | 37 | 查看这篇短而明白,至少不像通用模板页那样空;不过内容仍偏概括,和 `prevention.html` 的主题边界也有些模糊。 | 查看明确“防复制”重点针对文字、表格、报价内容;补几个推荐组合方案;把和“防扩散”页的区别讲清楚。 | - |
zuopinji.html | 76 | 68 | 82 | 44 | 35 | 33 | 查看这篇比 `designercn.html` 自然得多,至少抓住了作品集分享的核心痛点,也更像写给真实用户看;不足是篇幅偏短,和 `portifolio.html`、`shejishi.html` 仍有主题重叠。 | 查看明确它是“作品集分享页”,而 `portifolio.html` 偏“提交 / 投递页”;补几个渠道差异场景;保留这种更直白、少模板味的写法。 | - |
jiami.html | 77 | 81 | 79 | 54 | 70 | 68 | 查看这篇完成度较高,问题、步骤、对比和适用场景都比模板页扎实;不足是有些句子在反复讲同一个意思,比如“发出去后还能管”“不是拿到链接就能看”重复较多。 | 查看把验证方式整理成一张选择表;精简重复口号,留下最关键的差异点;补几种验证失败时的排查路径,增强实操感。 | - |
mimafangwen.html | 77 | 79 | 81 | 52 | 68 | 65 | 查看整体比模板页成熟,密码访问的定位、和短信验证的轻重关系都讲得比较清楚;但有些段落还是在重复“轻量门槛”这个概念,节奏略拖。 | 查看压缩重复定义;加上“口令怎么发更稳、口令改了怎么办、忘记口令怎么处理”这类实操问题;让这篇和 `jiami.html` 的差异更鲜明。 | - |
prevent_downloading_maipdf.html | 77 | 74 | 79 | 44 | 36 | 34 | 查看聚焦“别让别人顺手下载带走”这件事,方向清楚,也比模板页更像问题解决文;不足是篇幅略短,浏览器缓存、截图、页面录制等边界讲得不够。 | 查看补“不能绝对阻止什么”这一段;加入和动态水印、到期、验证联动的建议;把场景再举具体一点。 | - |
share_pdf_securely.html | 77 | 82 | 79 | 55 | 68 | 65 | 查看安全分享的主线比较完整,也确实比纯模板页更像一个成熟专题;问题是和 `jiami.html`、`bufang.html`、`sharepdf.html` 有交叉,容易显得体系里有多篇同义页。 | 查看把它做成“安全分享总览页”,下挂具体验证、到期、防扩散能力;补一张风险等级与推荐策略表;减少重复口号。 | - |
houtaishuoming.html | 78 | 82 | 80 | 52 | 66 | 63 | 查看这篇相对实用,至少真在讲后台怎么走、哪里排查;但篇幅偏长,仍有一些“平台很强、后台可控”式重复表达,和平台说明页也有交叉。 | 查看加一版更直白的新手清单,比如“先上传、再建入口、再配规则、最后查状态”;补几张后台对应截图或模块示意;砍掉重复价值描述。 | - |
pingtaishuoming.html | 78 | 70 | 82 | 45 | 44 | 42 | 查看平台说明这篇比较适合作为入门页,逻辑清楚,也把国内外入口说明带上了;不足是和 `platform.html`、`whichone.html`、`maifileormaipdf.html` 有一定信息重叠。 | 查看把它定位成“总览页”,少讲重复的平台价值,多讲第一次理解产品时最需要知道的 3 件事;把其它说明页的差异一句话讲明白。 | - |
shareonwechat.html | 78 | 80 | 82 | 53 | 64 | 61 | 查看微信场景天然高频,这篇也写得比较贴近聊天、群发、移动端打开;不过和 `sharepdf.html`、`cloudshare.html` 仍有重复,且部分句子还在套同一类结构。 | 查看补聊天私发、群内、企微、公众号菜单的差异;强化微信里“点开即看”的细节;删除和通用分享页重复过多的部分。 | - |
sharepdf.html | 78 | 81 | 82 | 54 | 66 | 63 | 查看在线分享 PDF 这篇是比较稳的中枢页,主题明确、理解成本低;但和 `cloudshare.html`、`pdftourl.html`、`share_pdf_securely.html` 的分界线还不够清晰。 | 查看把这篇明确定位成“通用分享主入口”;其它页分别偏云端管理、安全分享、转链接;用一句话说明各自差异,避免目录内自相竞争。 | - |
sms_verify.html | 78 | 80 | 80 | 52 | 67 | 64 | 查看短信验证的场景、优势、和口令验证的区别写得比较完整,也更贴近日常业务;不足是和 `mimafangwen.html`、`jiami.html` 的结构仍很像,部分句子复用感明显。 | 查看补验证码收不到、国际号码、手机端体验等实务问题;用一个更明显的“什么时候该上短信验证”的判断块;精简重复表述。 | - |
teda.html | 78 | 74 | 82 | 44 | 42 | 39 | 查看特大 PDF 这篇很务实,问题和好处都比较直接,用户容易理解为什么“大文件更适合发链接”;不足是大文件特有细节还能再多一些,比如预览速度、移动端加载、压缩取舍等。 | 查看补大文件上传前后的建议;增加“什么时候需要压缩、什么时候直接转链接”的判断;把常见卡点写具体。 | - |
whichone.html | 78 | 66 | 83 | 43 | 36 | 34 | 查看这篇更像快速决策页,读起来很快,也比较适合解决“到底选哪个入口”的问题;缺点是和 `maifileormaipdf.html` 有明显重叠,两个页面容易互相抢词。 | 查看一个做“速选页”,一个做“原理说明页”;把命名统一;保留这篇的快判断优势,少重复底层解释。 | - |
pengyouquan.html | 79 | 83 | 81 | 55 | 64 | 61 | 查看这篇在场景上比较具体,知道朋友圈不是附件场景,也讲了封面、亮点、引导动作这些关键点;但篇幅稍长,某些地方在反复讲“封面先停住、入口承接全文”。 | 查看浓缩成更像运营指南的结构;补实际封面写法和反例;把“朋友圈海报最该打磨的 4 个地方”再做得更像清单。 | - |
platform.html | 79 | 84 | 80 | 50 | 62 | 60 | 查看比 `pingtaishuoming.html` 更丰富,也更像产品逻辑页,平台化处理这件事讲得比较完整;但仍偏长,平台、功能、团队协作几个层面叠在一起,读起来稍重。 | 查看把首屏总结再简化;补一个团队使用案例,把“统一后台”的价值落到真实流程;删掉重复的“发后还能管”句子。 | - |
maifileormaipdf.html | 80 | 68 | 84 | 42 | 35 | 34 | 查看这篇短,但判断逻辑清楚,面向国际还是中国大陆一眼就懂;不足是信息有点单薄,命名上 `MaiFile / MaiPDF / maipdf.cn` 混着出现,仍可能让用户轻微困惑。 | 查看加一个极简选择流程图;统一品牌和域名的表述方式;补一句“能力差异不大,主要按访问环境选”放在更前面。 | - |
shejishi.html | 80 | 80 | 82 | 47 | 52 | 49 | 查看相比 `designercn.html`,这篇更像真的在为设计师写,求职、提案、客户预览、改稿这些场景都更贴近人;不足是仍有一些模板句式,和作品集系列页存在交叉。 | 查看把“设计师分享”明确定位成行业场景页;给出不同阶段的权限建议;删掉和作品集提交页重复度高的句子。 | - |
index.html | 81 | 78 | 86 | 48 | 40 | 38 | 查看作为专题首页,这页的价值挺明确,分类清楚、检索感也强;缺点是它更像目录,不像文章,且部分栏目存在主题重叠,容易把用户带到多个相似页面。 | 查看补一块“按问题推荐先看哪篇”的导航;合并明显重复的专题入口;把相近页面的差异用一句话标出来,减少用户来回跳。 | - |
preventmaipdf.html | 84 | 85 | 80 | 38 | 28 | 26 | 查看这是目录里完成度比较高的一篇,最大优点是没有乱承诺“绝对防转发”,而是很现实地讲“降低转发后的可用性”;缺点只是内容略偏列表感,略少一点结构收束。 | 查看加一张“资料类型 -> 推荐组合”的速查表;把标准防护和 FenceView 的选择逻辑再讲清一点;保留这种少吹牛、多讲边界的写法。 | - |
replacepdf.html | 87 | 90 | 84 | 36 | 24 | 22 | 查看这是非常实用的一篇,高频痛点抓得准,也确实解释了“替换不改链接”为什么值钱;主要问题不是内容不够,而是稍微有点长,个别段落能再压实。 | 查看增加“什么情况该替换、什么情况该新开链接”的判断表;补替换后需要检查的风险清单;首屏再缩成一句更锋利的结论。 | - |
这条链路现在的目标是:先生成支付二维码 → 用户完成微信支付 → 系统确认回调成功 → 再发送短信验证码 → 最后提交新密码。下面的 Mermaid 图把前端页面、支付、短信和数据库关系都画在一起。
| 文件 | 在重置流程里做什么 | 和谁联系 |
|---|---|---|
6/resetpassword.html |
前端总控页。收手机号、拉支付二维码、轮询支付状态、在付款后请求发送短信、最后提交验证码和新密码。 | 调用 ../indexpay.php、6/check_reset_payment.php、6/tencentsms.php、6/confirm.php。 |
indexpay.php |
向微信下单,生成二维码内容,并插入一条 lvfaPay 订单记录。 |
写 lvfaPay.tradeNO / Description / amount / CreateDT,回调地址指向 notify.php。 |
notify.php |
接收微信支付回调。付款成功后,把对应订单的 PayDT 更新成“时间 + 交易号”。 |
更新 lvfaPay;若订单号带 MaiRPay,这里只记支付成功,不直接发短信。 |
6/check_reset_payment.php |
给前端轮询用,判断某个 paymentKey 对应的单子是不是已经真正付款。 |
按 Description = paymentKey 查询 lvfaPay,接口层返回 pending 或 paid,但数据库里的 PayDT 真正成功值不是字面量 Paid。 |
6/tencentsms.php |
负责发短信验证码。注册和重置共用一个接口,但重置分支会先核对支付状态。 | purpose=register 走注册逻辑;purpose=resetpassword 时先查 lvfaPay,再调腾讯云短信,并更新 userlist.md5sms。 |
6/confirm.php |
真正落新密码。只有验证码、手机号和状态都匹配时才把新密码写入数据库。 | 更新 userlist.passcode,并把 statusRegister 从 2 改回 1。当前要注意:这里只判断 SQL 有没有执行成功,没有额外判断是否真的更新到了记录。 |
password.php |
数据库连接配置。 | 被 indexpay.php、notify.php、6/check_reset_payment.php、6/tencentsms.php、6/confirm.php 共用。 |
printback.php |
不是当前重置主链路的一部分,但它能侧面看出老系统对 PayDT 状态的理解。 |
把 PayDT != 'No' AND PayDT != 'Paid' 当作“已付款但未消费”的状态。 |
6/login.php 现在不是纯静态登录页。它开头还有强制 HTTPS、session_start() 和 session_destroy(),所以实际上还兼着“进入登录页时顺手退出登录”的作用。后面如果要改成 login.html,应该保留一个 PHP 包装页或单独拆出 logout.php,不要直接只改后缀。
| 表 | 关键字段 | 作用 |
|---|---|---|
lvfaPay |
tradeNO、Description、CreateDT、PayDT、amount |
支付单表。Description 这里存的是前端生成的 paymentKey,重置页后续就是靠它去查这笔单的付款状态。 |
userlist |
email、md5sms、statusRegister、passcode |
用户表。付款成功后发短信时写入验证码和 statusRegister=2;最终 confirm.php 再把密码写进去并恢复成 statusRegister=1。 |
按当前注册与重置密码代码一起看,statusRegister 更像“流程状态”,不是“用户类型”。
| 值 | 现在的实际含义 | 在哪些流程里出现 |
|---|---|---|
1 |
正常完成态。可以理解为“当前账号已经完成最终确认”。注册完成后是 1,重置密码完成后也会回到 1。 | 6/tencentsms.php 用它判断手机号是否已注册;6/confirm.php 最终会把状态改回 1。 |
2 |
短信验证后的临时待确认态。表示验证码已经发出,但当前流程还没有最后完成。 | 注册时短信发出后先写成 2;重置密码时付款成功并发短信后也写成 2;最后都要再经过 confirm.php 才回到 1。 |
主流程本身是通的,但现在还有两个需要记住的边角风险。
| 点 | 当前情况 | 影响 |
|---|---|---|
登录时是否检查 statusRegister |
6/session.php 登录时只查 email + passcode,并不检查 statusRegister。 |
这表示账号在重置流程中暂时被置为 2 时,旧密码理论上仍然可能登录,直到新密码最终写入。 |
6/confirm.php 的成功判断 |
当前只要 SQL 执行成功就直接返回 goodregister,没额外判断是否真的更新到了记录。 |
如果验证码不匹配、手机号不匹配或状态不是 2,理论上可能出现“没有更新任何行,但接口仍然回成功”的风险。 |
按当前代码反推,PayDT 不是简单的布尔值,而是一个带阶段含义的状态字段。
| PayDT 值 | 代表什么 | 是谁写进去的 |
|---|---|---|
No |
大概率是数据库默认值,表示刚建单、还没付款。 | 不是 PHP 显式写入,通常来自表默认值。 |
2026/03/18+12:34:56+420000... |
微信已经付款成功,而且支付回调已经打到了站点。 | notify.php 把时间和微信交易号拼进 PayDT。 |
Paid |
这是老流程里被后续业务再次确认/消费过的状态,不是微信原始回调值。 | printback.php 会把某些已付款记录改成这个值。 |
notify.php 回调后写入的“时间 + 交易号”格式。它和单纯的 No、Paid 不是一个语义层级。
你现在这套链路的核心问题,不是 bt 本身,而是 viewer.mjs 里最终还是要根据 bt 选出 guaguashimaimai 或 qweewq,再让浏览器去打开 PDF。只要浏览器能拿到这个密码,用户就总有办法看到它。
| 方案 | 浏览器是否知道密码 | 改动量 | 适合你现在的项目吗 |
|---|---|---|---|
继续前端判断 bt,viewer 自动填密码 |
知道 | 最小 | 不适合,只是继续暴露 |
| 前端去接口拿密码,再喂给 viewer | 还是知道 | 中 | 不适合,只是把暴露位置挪了一下 |
服务端用 qpdf/pdftk/mutool 解锁后输出 PDF |
不知道 | 中到大 | 适合,应该走这条 |
对你当前项目,最稳的是保留现有 PHP 判断旧链接规则,但把“选密码”和“解锁 PDF”都挪到新接口 serve_pdf.php 里,前端只负责展示。
会。只要浏览器最后拿到了“已经解锁的 PDF 内容”,用户就总有办法把这份内容保存下来。后端解锁解决的是“密码暴露”,不是“内容绝对无法被拿走”。
| 问题 | 后端解锁能不能解决 | 原因 |
|---|---|---|
| 前端暴露固定密码 | 能 | 密码只存在服务器内部,不再出现在 viewer 或 DevTools 里 |
| 用户拿到最终 PDF 内容 | 不能彻底解决 | 浏览器必须先拿到内容,才能显示内容 |
下面这张图描述的是现在真实在跑的链路,不是理想架构。以 file/web/index.php 为例,file/index.php 基本同构,只是相对路径不同。
这条链路的关键特点是:它不是一次跳转到阅读页,而是先返回一个 loading 壳,再用 fetch + document.write 把 read.html 灌进来。
| 文件 | 在哪里被引 | 作用 | 现在是否主链路使用 |
|---|---|---|---|
https://m.maitube.com/file/build/pdf.mjs |
file/web/index.php、file/index.php、file/read.html |
PDF.js 核心构建 | 是,但在 loading 页里偏早加载,存在浪费 |
https://m.maitube.com/file/web/6275viewer.mjs |
file/read.html |
PDF.js viewer 打包文件,负责拼 PDF 地址、密码回调、渲染 | 是,当前阅读主链路核心文件 |
https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js |
file/web/index.php、file/index.php |
支付弹窗里生成二维码 | 是,但并不是首屏加载必须资源 |
file/web/v.js / file/web/v.min.js |
当前这条链路里未直接被 HTML 引用 | 旧版阅读逻辑压缩包/备份逻辑 | 不是主链路,容易误导排查 |
file/web/viewer.mjs / file/web/viewer.min.mjs |
当前 read.html 未直接引入 |
与 6275viewer.mjs 相近的其它打包版本 |
当前主链路不是它,但内容高度相似 |
file/read.html 底部大段 inline script |
file/read.html 本身 |
日志、广告、支付、禁复制、触摸交互、水印等杂项 | 是,而且代码量很大 |
换句话说,现在真正决定“能不能看到 PDF”的 JS,核心只有两块:read.html 的内联脚本和 6275viewer.mjs。v.js / v.min.js / viewer.min.mjs 更多是历史版本或平行版本。
如果目标是进一步降低 PDF 被整包拿走的概率,方向应该是“提高拿走成本”,不是追求绝对阻止。
给 serve_pdf.php 加短时效签名、时间窗、cookie 绑定,避免一个地址被长期复用。
即使内容被拿走,也让内容带上访客识别信息,提高传播成本和追责能力。
如果你不想让前端一次拿到完整裸 PDF,可以把每一页渲染成图片或页级数据,再逐页返回。
对异常频率、异常 UA、批量 Range 抓取做拦截,至少能挡住一部分粗暴下载。
现实一点的目标应该是:先把密码从前端移走,再用签名、动态水印、审计和必要时的图片化输出,把“轻松整包拿走”的概率压低。
6275viewer.mjs、viewer.mjs、viewer.min.mjs、v.js、v.min.js 同时存在,排查时非常容易看错。
index.php 只是 loading 壳,却已经先拉了 pdf.mjs。后面真正的 read.html 又会再拉一次阅读页相关资源。
现在状态总线全靠 sessionStorage,页面切换靠 fetch html + document.write。能跑,但很脆。
6275viewer.mjs 现在会先对 PDF 做一次 HEAD,再让 PDF.js 自己 GET 真正文件。大文件场景下,这一步收益不一定高。
serve_pdf.php,可以把这层 HEAD 逻辑简化掉。read.html 现在底部的大段 inline script 混合了 UI、日志、水印、支付、反复制和广告逻辑,后续会越来越难维护。
reader-bootstrap.js 和 reader-ui.js 两块。现在 viewer 里自己拼 joehasafile2,还带多套域名判断。后面应该统一成一个出口。
/file/serve_pdf.php?e=...。| 阶段 | 做什么 | 收益 |
|---|---|---|
| 第 1 步 | 确认线上只使用哪一个 viewer 文件,并标注其它文件为历史/备用 | 先把代码地图变清楚,后面才不容易改错文件 |
| 第 2 步 | 把 loading 页精简,只负责验权和跳转,不再提前加载 PDF.js | 更轻、更稳,减少重复资源加载 |
| 第 3 步 | 新增 serve_pdf.php,先跑通一个老链接样例 |
把密码和真实路径收回服务器 |
| 第 4 步 | 把 read.html 的 PDF 地址统一指向 serve_pdf.php |
前端开始脱离旧的密码链路 |
| 第 5 步 | 从 viewer 删除 bt -> guaguashimaimai / qweewq 自动提交逻辑 |
彻底去掉前端密码暴露点 |
| 第 6 步 | 把 sessionStorage + document.write 改成 bootstrap JSON + 正常页面初始化 |
结构更稳,调试更简单 |
| 第 7 步 | 再补缓存、签名、Range、动态水印和审计 | 兼顾性能和内容防护 |
如果往平台级升级,不建议用“PHP 全扔掉”这种想法来推进。更好的思路是按职责分层:边缘层、业务 API 层、文件处理层、异步任务层,各自用最合适的技术。
| 技术 | 适合做什么 | 不适合做什么 | 我对你项目的建议 |
|---|---|---|---|
PHP |
现有站点、后台接口、数据库读写、简单模板渲染、已有业务逻辑复用 | 大规模异步编排、复杂文件流水线、长期并发任务管理 | 短期不要急着废掉。先把它收成“稳定的 origin API”。 |
Cloudflare Workers (JS/TS) |
边缘鉴权、签名、限流、反盗链、轻量 bootstrap、日志接入、缓存控制 | 依赖本地二进制的 PDF 解锁、复杂文件转换、重 CPU 的文件处理 | 非常适合做第一层网关,把请求先挡在边缘。 |
Cloudflare Python Workers |
语法上用 Python 写边缘逻辑、访问 R2/KV/D1/Queues、轻量 API | 像传统 Linux 服务器那样运行 qpdf、ghostscript、pdftk |
可以用,但它本质上还是边缘运行时里的 Python,更适合轻逻辑,不适合当文件处理后端。 |
Python 后端服务 |
文件处理、PDF 解锁、转图片、转缩略图、OCR、异步任务、队列消费 | 直接替代整站现有老页面模板 | 如果要上第二代文件处理内核,Python 是很合适的。 |
你现在最耗损的地方,不是“用了 PHP”,而是页面链路太绕、状态传递太散、同类脚本版本太多。
sessionStorage 到处传。如果把 PHP 收口成少量稳定接口,例如 bootstrap.php、serve_pdf.php、log.php,它完全可以继续当 origin API。
PDF 解锁、转图、缩略图、OCR 这些任务,天然更适合独立服务,不适合塞在页面入口 PHP 里。
Worker 适合站在最前面做分流、验签、缓存、限流,不适合扛所有业务。即使现在边缘运行时 CPU 上限提高了,也不等于应该拿它去跑完整 PDF 文件流水线。
这个理想架构不是要求你一步到位,而是告诉你最终应该形成“边缘层 + origin API + 文件服务 + 队列 + 存储 + 分析”的分工,而不是继续把所有事情都揉在 index.php 和 read.html 里。
| 档位 | 目标 | 主要动作 | 适合什么时候做 |
|---|---|---|---|
| 保守升级 | 不重写平台,但把关键风险点拆掉 | 保留 PHP,新增 serve_pdf.php、bootstrap JSON、统一 viewer、删前端密码 |
现在就可以做,ROI 最高 |
| 混合架构 | 让平台有边缘层和文件服务层 | 前面加 Worker,后面保留 PHP API,再新增 Python 文件处理服务 | 当阅读量、文件量、替换和转图任务明显增多时 |
| 平台重构 | 把上传、阅读、统计、转换做成标准化服务 | 前端应用化、API 服务化、对象存储化、队列化、日志分析化 | 当你准备把它长期当产品而不是单站来经营时 |
我不认为你现在“还在一台 AWS Lightsail 上运行”这件事本身很落后。真正开始落后的,不是机器名字,而是“网站、文件、解锁、统计、后台、日志、支付、广告都压在同一台机器上”这种形态。
| 现状 | 早期为什么成立 | 现在为什么开始吃力 |
|---|---|---|
| 一台 Lightsail 扛整站 | 便宜、简单、部署快,PHP/MySQL/静态文件都能一起跑 | 所有职责耦合,任何一类负载上来都会影响全局 |
| PDF 和业务接口都在同机 | 路径简单,开发时方便 | 文件 IO、带宽、CPU 和业务接口互相抢资源 |
| 阅读逻辑和文件处理揉在一起 | 一开始改得快 | 后面加防下载、缓存、签名、替换、统计都会越来越乱 |
| 阶段 | 核心目标 | 怎么做 | Lightsail 在这一阶段扮演什么角色 |
|---|---|---|---|
| 第一阶段:不迁机,先加外层 | 先把入口治理起来,不改大本营 | 接入 Cloudflare;做 CDN、WAF、限流、缓存;把阅读页统一到一个受控出口;保留 Lightsail 做 origin | 继续做主站和主 API |
| 第二阶段:把文件和静态资源拆出去 | 减轻单机带宽和文件压力 | 原始 PDF、缩略图、缓存文件迁到 R2/S3;静态资源走对象存储/CDN;Lightsail 只保留业务接口和后台 | 从“全能机器”收缩成“业务机器” |
| 第三阶段:把文件处理服务拆出去 | 让 PDF 解锁/转图/缩略图不再绑死在主站上 | 新增独立文件处理服务,可优先用 Python;通过队列或 API 与主站通信;主站只负责编排和控制 | 变成控制中心,而不是重活执行者 |
不迁任何服务器,只做“减耦合但不搬家”。这是最现实、最值得先做的一步。
serve_pdf.php,把前端密码拿掉。开始把“文件”从主站机器上剥离出去,但业务仍然留在 Lightsail。
开始真正平台化,主站和文件处理彻底分层。
不是现在就必须迁。通常要等职责已经拆开,迁移才值得。
换句话说,你现在最该做的不是“马上换平台”,而是把 Lightsail 从“全栈混装机”慢慢改造成“稳定 origin + 控制中心”。只要这一步做对了,以后迁到 ECS、EKS、Railway、Fly.io、Cloud Run,甚至继续留在 AWS,都会容易很多。
sessionStorage + document.write 改成 bootstrap JSON + 正常页面初始化。file/web/index.php 和 file/index.php 里,原来判断 frommaiimg 的逻辑可以保留,但这一步只在服务器内部使用。
viewer 看见 guaguashimaimai 和 qweewq。$pwdMode。新增 file/serve_pdf.php。这个文件负责鉴权、找源文件、决定旧密码模式、调用解锁工具、输出 PDF。
e,以及你现有的 cookie / 签名 / 次数限制。现在 read.html 里会拼 joehasafile2 指向真实 PDF 路径。后面应该改成指向 serve_pdf.php。
/file/serve_pdf.php?e=agRX8BiabuYDQm每次请求都临时跑解锁工具会慢。更实用的办法是:第一次请求时生成缓存文件,后面重复复用。
这张图里最关键的一点是:固定密码只出现在 serve_pdf.php 内部。浏览器以后拿到的是“文件内容”,不是“解锁密码”。
| 文件 | 怎么改 | 目的 |
|---|---|---|
file/read.html |
把 joehasafile2 改成你的受控接口地址,例如 /file/serve_pdf.php?e=... |
前端不再直接碰真实 PDF 路径 |
file/web/index.php / file/index.php |
旧链接判断逻辑保留,但只在服务端使用,不再给前端密码相关信息 | 把判断留在 PHP,删掉前端依赖 |
file/serve_pdf.php |
新建。负责鉴权、找源文件、决定密码模式、解锁、输出 PDF | 这是整个方案的核心 |
file/web/viewer.mjs / 6275viewer.mjs |
删掉前端里根据 bt 选择 guaguashimaimai / qweewq 的代码 |
彻底移除暴露点 |
| 缓存目录 | 例如 /var/cache/maipdf-unlocked/,不要放到 web 根目录 |
避免缓存文件直接被猜路径访问 |
// serve_pdf.php 伪代码
$email = $_GET['e'] ?? '';
$row = findPdfRowByMdemail($email);
if (!$row) { http_response_code(404); exit; }
checkReadPermission($row, $email); // 次数、时长、cookie、验证码等
$sourceFile = findRealPdfPath($row['url']);
$pwdMode = decideLegacyPdfMode($row['url'], $email); // xxx / frommaiimg / none
$password = passwordFromMode($pwdMode); // 只在服务器里返回真实密码
$cacheKey = sha1($sourceFile . '|' . filemtime($sourceFile) . '|' . $pwdMode);
$cacheFile = '/var/cache/maipdf-unlocked/' . $cacheKey . '.pdf';
if (!file_exists($cacheFile)) {
if ($password) {
// 推荐 qpdf;pdftk / mutool 也可以
$cmd = 'qpdf --password=' . escapeshellarg($password)
. ' --decrypt '
. escapeshellarg($sourceFile) . ' '
. escapeshellarg($cacheFile);
exec($cmd, $out, $code);
if ($code !== 0 || !file_exists($cacheFile)) {
http_response_code(500);
exit('unlock failed');
}
} else {
copy($sourceFile, $cacheFile);
}
}
streamPdfWithRange($cacheFile); // 最好支持 Range,PDF.js 大文件更稳
第一版可以先实现“服务端解锁 + 正常输出 PDF”;第二步再补 Range 支持、缓存清理、签名链接、防盗链这些增强项。
serve_pdf.php,只处理一个老链接样例,确保能正常打开。read.html 的 PDF 地址改成新接口。根目录 Eng/:英文版博客与说明页,样式与脚本与 home/ 对齐思路,但不直接引用 home/,在 Eng/ 下各复制一份,便于英文站单独改版。
Eng/revolution-layout.css(自 home/revolution-layout.css 复制)Eng/revolution.js(自 home/revolution.js 复制,含 fade-up、图片 modal)Eng/index.html(英文博客首页,仅文章列表与导航;不写内部素材 / SVG / README 等非文章入口)Eng/maipdf2026/(英文截图、流程 SVG、show_off/ 等)| 项目 | 中文站常见表述 | 英文站(maipdf.com 等) |
|---|---|---|
| 身份验证 | 短信验证等 | 无短信;使用 邮件验证,且仅指定邮箱可收到验证码。 |
| 阅读提醒 | 邮件提醒等 | 阅读提醒支持 Telegram(见 maipdf2026 界面「Read Alerts (Telegram)」)。 |
英文文章配图优先用 Eng/maipdf2026/ 下英文 UI 图,避免混用中文版截图导致口径不一致。
不要求与中文 home 文件名一一对应。英文页使用有意义、可读的英文 slug(小写、连字符、描述主题),利于 SEO 与用户理解。
| 原则 | 说明 |
|---|---|
| 可读 | 一眼能看出页面主题,例如 pdf-to-shareable-link.html,而不是 page3.html。 |
| 连字符 | 单词之间用 -,不用下划线或驼峰。 |
| 避免直译中文文件名 | 不必叫 convertQR.html;可改为 pdf-to-qr-code-sharing.html 等按英文用户搜索习惯命名。 |
| 入口例外 | Eng/index.html 作为目录入口可保留;其余专题页尽量用语义化 slug。 |
后续文章 slug 示例(待建页时可选用):
secure-pdf-sharing-overview.html — 安全分享总览(已建)Slug(Eng/ 下文件) | 主题 / 中文参考 |
|---|---|
pdf-to-qr-code-offline.html | 线下 / 打印场景 PDF 转 QR;思路对齐 home/convertQR.html |
replace-pdf-same-link.html | 同链接替换 PDF;控制面板 / 替换流程 |
email-verification-allowlist.html | 邮件 OTP + 指定邮箱;英文站无短信口径 |
入口索引:Eng/index.html 已链到各批文章。
Slug(Eng/ 下文件) | 主题 / 中文参考 |
|---|---|
pdf-to-link-not-attachment.html | PDF 转链接、附件 vs 入口;home/pdftourl.html |
share-pdf-links-by-channel.html | 链接按渠道发送 + 简要四场景矩阵;home/lianjiepdf.html、home/broadcast.html |
telegram-read-alerts.html | Telegram 阅读提醒;与 maipdf2026 英文界面一致 |
Slug(Eng/ 下文件) | 主题 / 中文参考 |
|---|---|
secure-pdf-sharing-overview.html | 安全分享边界与组合建议;home/bufang.html |
prevent-pdf-copying-practical-limits.html | 防复制手段与边界;home/fangzhifuzhi.html |
choose-pdf-restrictions-by-scenario.html | 限制规则选择决策树;home/restriction.html |
pdf-restriction-controls-explained.html | 限制功能逐项说明;home/restrict.html |
pdf-link-expiration-controls.html | 到期/自毁/次数/验证差异;home/daoqi.html |
dynamic-watermark-for-pdf-sharing.html | 动态水印用途与边界;home/dongtai.html |
control-who-can-open-pdf-links.html | 访问权限分级与搭配;home/kongzhi.html |
disable-download-and-copy-viewer-mode.html | 禁下载/禁复制实际效果与边界;home/jinzhi.html |
control-pdf-distribution-after-sharing.html | 外发后继续控(谁看/多久/几次);home/kongzhiwaifa.html |
reduce-pdf-forwarding-and-copy-risk.html | 防抄走四风险四层应对;home/fangzhicopied.html |
Eng/revolution-layout.css、Eng/revolution.js、Eng/index.html;本 Tab 写入 work.html。pdf-to-qr-code-offline.html、replace-pdf-same-link.html、email-verification-allowlist.html;Eng/index.html 增加导航与「Articles (batch 1)」列表。pdf-to-link-not-attachment.html、share-pdf-links-by-channel.html、telegram-read-alerts.html;Eng/index.html 增加 batch 2 与顶栏导航。Eng/index.html 收窄为纯博客首页:合并文章列表、去掉「English Version Rules」素材墙、页脚移除 Workflow SVG / Image Notes 等内部链接。secure-pdf-sharing-overview.html;从 home/bufang.html 抽取“风险-手段-边界”结构。prevent-pdf-copying-practical-limits.html 与 choose-pdf-restrictions-by-scenario.html;对应 home/fangzhifuzhi.html、home/restriction.html。pdf-restriction-controls-explained.html;对应 home/restrict.html,与 restriction 决策页形成“决策 + 解释”配对。pdf-link-expiration-controls.html、dynamic-watermark-for-pdf-sharing.html;对应 home/daoqi.html、home/dongtai.html。control-who-can-open-pdf-links.html、disable-download-and-copy-viewer-mode.html;对应 home/kongzhi.html、home/jinzhi.html。control-pdf-distribution-after-sharing.html、reduce-pdf-forwarding-and-copy-risk.html;对应 home/kongzhiwaifa.html、home/fangzhicopied.html。来源:第三方审看结果。评分维度为 内容理解 / 页面设计 / 易懂 / AI痕迹(10 分制,AI痕迹分数越高表示痕迹越重)。本面板用于后续英文改写与中文页重构时做优先级依据。
| 路径 | 内容理解 | 页面设计 | 易懂 | AI痕迹 | 主要问题 | 建议方向 |
|---|---|---|---|---|---|---|
/home/index.html |
7 | 7 | 8 | 8 | 重复表述;数据像模板化营销占位 | 删重复段落,用真实场景替代空泛数据描述 |
/home/pingtaishuoming.html |
6 | 7 | 8 | 7 | 偏总述,缺具体差异化例子 | 补真实使用场景与 before/after 片段 |
/home/showpdfonline.html |
8.5 | 8 | 9 | 6.5 | 语言仍有模板化痕迹 | 保留主结构,增加真实行业例子 |
/home/jiami.html |
7 | 7 | 8 | 6.5 | 偏功能罗列,案例深度不足 | 补“3步设置 + 结果”与界面截图链路 |
/home/convertQR.html |
7 | 7 | 9 | 6 | 内容深度一般,偏流程说明 | 加入“何时用二维码 vs 链接”的决策段 |
/home/maipdfexamples.html |
7.5 | 7 | 8 | 7 | 技术描述偏空泛 | 补“禁下载实际效果说明”(含阅读器截图) |
/home/maipdf_strong%20_protection.html |
6.5 | 6.5 | 8 | 7.5 | 与 examples 页重复度高 | 并入主功能页,避免同质化内耗 |
/home/bufang.html |
5 | 5.5 | 7 | 8 | URL / 标题 / 正文主题错位 | 统一主题(防盗版或分享教程二选一) |
/home/maifileormaipdf.html |
5.5 | 6 | 8 | 5 | 更像分流页,不是标准文章 | 保留分流用途,不纳入 SEO 内容池 |
/home/keycode.html |
2 | 3 | 6 | 2 | 主题明显跑偏(工具页误入内容目录) | 直接移出 /home 内容体系或 noindex |
建议结构:一个核心页(总览) + 多个场景页(报价、合同、培训、展会)+ 每页真实截图与 before/after。
| 分档 | 页面 | 执行建议 |
|---|---|---|
| 第一档 | /home/showpdfonline.html、/home/index.html、/home/convertQR.html |
优先做英文重写与结构复用,作为核心模板来源 |
| 第二档 | /home/jiami.html、/home/maipdfexamples.html、/home/pingtaishuoming.html |
补案例、补截图、减少功能清单式描述 |
| 问题较大 | /home/maipdf_strong%20_protection.html、/home/bufang.html、/home/keycode.html |
去重合并、修复主题错位、将跑偏工具页移出内容池 |
以下为第三方点评整理后的执行清单:每页都包含“问题本质 / 主要问题 / 怎么改 / 核心改法”。
/home/index.html/home/showpdfonline.html/home/convertQR.html/home/jiami.html/home/maipdfexamples.html/home/pingtaishuoming.html/home/maipdf_strong%20_protection.htmlmaipdfexamples 内容高重叠,SEO 相互竞争。/home/bufang.html/home/maifileormaipdf.html/home/keycode.html/home 内容体系并 noindex。keycode 直接移除;maipdf_strong%20_protection 删除或并入主页。bufang(URL/标题/正文一致性)。一句话定位:当前问题不是“内容不够”,而是“太像 AI 说明书,不像产品落地页”。
/home/showpdfonline.html(高转化版)用途:作为“从功能介绍页 → 转化页”的标准模板。以下内容按第三方建议原意整理,供重写时直接套用。
PDF在线查看,不用下载,一键生成可控分享链接
上传PDF → 生成链接 → 控制查看次数、设置过期时间、禁止下载复制
适合:资料分享 / 报价单 / 教培文件 / 产品手册 / 临时文件
不想让PDF被随便转发、长期保存?
1分钟生成可控PDF链接
按钮:【立即上传PDF】
你是不是遇到这些情况?
普通方式发PDF = 完全失控
MaiPDF = 可控分享
备注:此处需配 1 张真实 UI 图(上传后设置区或结果页)。
不再担心文件被乱传
| 普通PDF分享 | MaiPDF |
|---|---|
| 文件可下载 | 在线查看 |
| 可无限转发 | 可限制次数 |
| 无法控制时效 | 可设置过期 |
| 传播范围不可控 | 可控传播 |
现在就试试:上传PDF → 生成链接 → 控制访问
【立即使用 MaiPDF】
不用注册也可以试,30秒生成你的第一个PDF链接
maipdf.cn
收束语:好的页面不是“讲你能做什么”,而是“让用户觉得不用你就亏”。
记录产品核心功能的技术事实,写文章时以此为准,避免凭印象写出不准确的描述。
| 项目 | 说明 |
|---|---|
| 水印显示内容 | 水印上显示的是一个编号(数据库主键)。这个编号对应后台的一条记录,记录里包含:阅读码、浏览器信息、设备标识、打开时间。如果设了邮箱或手机验证,还会记录验证者的邮箱或手机号。 |
| 查询入口 | 发送者在 watermark.html(根目录)输入水印编号,即可查到对应记录的详细信息。查询接口:query_log.php(POST,参数 number)。 |
| 返回字段 | access_code(阅读码)、phone(识别信息 — 邮箱/手机号,未验证时为空)、user_agent(浏览器信息)、ip_address(网络标识)、open_time(打开时间) |
| 多语言 | watermark.html 支持 6 种语言自动切换:EN / 中文 / 日本語 / FR / DE / ES,优先读 localStorage,再按浏览器语言和时区判断。 |
| 防刷 | 查询按钮有 60 秒冷却计时。 |
| 显示位置 | 半透明文字叠加在阅读页面,每页都有,位置随机偏移,不嵌入原 PDF 文件。 |
| 写文章注意 | 文章中不要出现"IP地址"这个词,怕被搜索引擎误解。可用"设备信息""网络标识""访问标识"等替代。 |
| 项目 | 说明 |
|---|---|
| 核心定义 | 围栏式遮挡 + 悬停阅读。页面大部分内容被栅栏条纹遮住,鼠标悬停到哪里才显示那一小块区域。手机上用手指触摸。 |
| 防护效果 | 增强防截图效果——截图时只能拍到被栅栏遮住的画面。不是绝对禁止截图,而是提高截图成本(截图不完整、需要多次拼接)。 |
| 三种阅读模式 | 开放模式(无遮挡)→ 标准防护(禁右键/选中/打印)→ FenceView(栅栏遮挡 + 悬停可读)。三档逐级增强保护、逐级降低阅读体验。 |
| 对阅读体验的影响 | 会明显下降。读者只能看到鼠标附近的小区域,无法一目十行,阅读速度和舒适度大幅降低。不建议对大部分普通文件启用,只适合高敏感资料。 |
| 搭配建议 | FenceView + 水印 = 截图不完整 + 截图有痕迹,双层防护。但要权衡阅读体验的代价。 |
| 写文章注意 | 必须如实说明 FenceView 对阅读体验的负面影响。不能只讲保护效果不提代价。 |