服务器日志一天内出现 1.8 万次对 /wp-content/uploads/2025/10/manual.pdf 的请求,来自三十多个 IP,下载页访问量只有 200 次。日志里能对上时间点,这种反而好排。
下载按钮的 href 直接写文件真实地址,页面源码和 sitemap 都能读到。目录没关索引,爬虫顺着目录把文件名全收了。这一点先确认清楚,后面就不用反复试。
location ~* ^/wp-content/uploads/downloads/ {
deny all;
}
围绕「下载路径暴露」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
处理上按这个顺序:下载链接改成带签名的跳转地址,真实路径放在 web 根目录之外;关闭 uploads 下大文件目录的目录浏览和 PHP 执行;用爬虫 UA 请求一次直链,确认返回 403 而不是文件。
结果对不对很好判断,直接访问文件路径返回 403,页面源码里不再出现真实目录。
