WordPress付费媒体文件通过wp-json/wp/v2/media暴露,如何隐藏?(新手指南)
解决WordPress媒体文件API公开及付费文件访问限制问题
第一步:限制WP REST API的媒体端点公开访问
先把泄露文件链接的API端点封死,不让未登录用户访问:
插件法(新手首选)
- 后台搜索安装「Disable REST API」或「Restrict REST API」插件
- 启用后进入插件设置页,找到「允许访问的端点」或「限制未登录用户访问」选项
- 取消勾选
wp/v2/media相关权限,或者直接设置「仅登录用户可访问所有REST API端点」,保存后未登录用户访问https://[website]/wp-json/wp/v2/media会被拦截
代码法(不想装插件的话)
- 进入后台「外观」→「主题文件编辑器」,找到当前主题的
functions.php文件 - 在文件末尾添加以下代码(务必先备份主题文件):
add_filter('rest_authentication_errors', function($result) { if (!is_user_logged_in() && isset($_SERVER['REQUEST_URI']) && strpos($_SERVER['REQUEST_URI'], '/wp-json/wp/v2/media') !== false) { return new WP_Error('rest_not_logged_in', '请登录后访问', array('status' => 401)); } return $result; });
- 保存修改,未登录用户访问媒体API端点会返回401未授权错误
第二步:限制付费文件的直接访问权限
光封API还不够,知道文件URL的人仍能直接打开,得给文件本身加权限:
付费内容插件法(最省心)
- 后台搜索安装「MemberPress」或「Restrict Content Pro」(有免费基础版)
- 按插件向导设置付费会员等级,把需要保护的PDF/Excel文件关联到对应等级
- 插件会自动处理权限,只有付费登录用户才能查看/下载文件,直接访问URL会跳转到登录/付费页面
手动目录+HTACCESS限制法(进阶)
- 在
wp-content/uploads里新建paid-files子文件夹,把所有付费文件移进去 - 在
paid-files文件夹里创建.htaccess文件,写入以下内容:
AuthType Basic AuthName "付费内容区域" AuthUserFile /path/to/your/.htpasswd Require valid-user
- 用在线htpasswd生成工具生成
.htpasswd文件,放在网站根目录外的安全位置,把代码里的/path/to/your/.htpasswd改成实际路径 - 后续上传付费文件时手动选择这个文件夹,只有输入正确账号密码的用户才能访问
新手注意事项
- 修改主题代码或服务器文件前,一定要备份网站和数据库,避免出错
- 设置完成后用未登录账号测试API端点和文件URL,确认无法访问
- 若用了缓存插件,记得清理缓存确保设置生效
内容的提问来源于stack exchange,提问作者Daryl Anderson
相关产品推荐
相关产品推荐

