官网改版,产品页、新闻页都好说,麻烦在「资料下载」。
三档资料
客户那边的产品资料分三类:公开的产品彩页谁都能下;经销商价目表、检测报告只给签了协议的经销商;还有一批内部培训材料只给自家员工。以前的做法是把文件放在一个网盘里,发链接,链接转发出去就收不回来。
我们没上完整的权限系统。文件表里加了一列 level,值 0、1、2 对应三档;用户表里加 role,登录后写进 session。下载请求先过 PHP,比对 level 和 role,不够就回一句「联系客户经理开通」,不报 403,免得看着像系统坏了。
真实路径不暴露
文件本身不放在 web 根目录,挪到 /data/files 下面。PHP 校验通过后不自己读文件吐给浏览器,而是回一个 X-Accel-Redirect 头,让 Nginx 去内部路径取。这样浏览器里看不到真实存放位置,也绕不过校验直接猜文件名。
有个小坑:Nginx 里那条内部 location 要标 internal,忘了标的话外部能直接访问,等于白做。上线前拿 curl 试了一遍,确认直接请求返回 404。
下载日志
每次下载写一条:user_id、file_id、时间、IP。一共 4 个字段,不多。市场部每月导一次,按月份筛,看哪份资料被下得多、哪些经销商账号一直没动过。
第一版日志里没记文件名,只记了 file_id,导出后还得回查一次表,被吐槽了。第二版直接把文件名冗余进日志,查起来快,代价是文件改名后历史日志对不上,这个我们认了。
上线
12 月 24 号上午切的。当天下午有个经销商打电话说打不开价目表,查了下是账号 role 还没从旧系统同步过来,手动改一条就好。这样的电话后来又来了 3 个,都是同一批账号,第二天批量补完就没了。
年底客户那边做复盘,市场部最常导出的不是「下载排行」,是「哪些账号从没登录过」。那份名单他们拿去挨个打电话,跟我们没关系了。

