为客户开发私有登录网站,如何让RSS Feed仅对Mailchimp开放?
仅允许Mailchimp访问私有RSS Feed的实现方案
嘿,刚好我之前帮客户处理过几乎一模一样的需求,既然你已经搞定了绕过WordPress的登录验证(跳过auth_redirect和is_user_logged_in的限制),那接下来只需要给这个Feed URL加上针对性的访问控制就行,给你两个实用的方案:
方案1:通过User-Agent验证(简单易实现)
Mailchimp在抓取RSS Feed时,会发送带有特定标识的User-Agent请求头,我们可以通过检查这个头来判断请求是否来自Mailchimp。
把下面的代码添加到你的主题functions.php文件,或者自定义插件里:
function restrict_rss_to_mailchimp() { // 替换成你的RSS Feed的URL路径,比如 '/feed/' 或者自定义的Feed路径 $target_feed_path = '/feed/'; if (strpos($_SERVER['REQUEST_URI'], $target_feed_path) !== false) { // Mailchimp的典型User-Agent标识,可根据实际抓取日志补充 $allowed_user_agents = array( 'Mailchimp', 'Mailchimp.com', 'Mailchimp Feed Fetcher' ); $user_agent = $_SERVER['HTTP_USER_AGENT']; $is_mailchimp = false; foreach ($allowed_user_agents as $agent) { if (stripos($user_agent, $agent) !== false) { $is_mailchimp = true; break; } } if (!$is_mailchimp) { // 非Mailchimp请求,返回403禁止访问 status_header(403); echo 'Access Denied: This feed is only available to Mailchimp.'; exit; } } } add_action('init', 'restrict_rss_to_mailchimp');
注意:你可以先开启服务器的访问日志,看看Mailchimp实际请求时用的User-Agent是什么,再补充到$allowed_user_agents数组里,确保准确性。
方案2:IP白名单验证(更安全)
如果担心User-Agent被伪造,用IP白名单是更稳妥的方式。Mailchimp官方会公布其抓取服务使用的IP段,你可以把这些IP添加到白名单里,只允许来自这些IP的请求访问Feed。
代码示例如下:
function restrict_rss_by_ip() { $target_feed_path = '/feed/'; if (strpos($_SERVER['REQUEST_URI'], $target_feed_path) !== false) { // 替换为Mailchimp官方公布的IP段,记得定期更新列表 $allowed_ips = array( '50.31.156.0/24', '50.31.160.0/20', '74.205.22.0/24', // 更多IP段请参考Mailchimp官方文档 ); $client_ip = $_SERVER['REMOTE_ADDR']; $is_allowed = false; foreach ($allowed_ips as $ip_range) { if (ip_in_range($client_ip, $ip_range)) { $is_allowed = true; break; } } if (!$is_allowed) { status_header(403); echo 'Access Denied: This feed is only available to Mailchimp.'; exit; } } } // 辅助函数:检查IP是否在指定网段内 function ip_in_range($ip, $range) { list($subnet, $mask) = explode('/', $range); $subnet_long = ip2long($subnet); $ip_long = ip2long($ip); $mask_long = -1 << (32 - $mask); return ($ip_long & $mask_long) == ($subnet_long & $mask_long); } add_action('init', 'restrict_rss_by_ip');
提示:Mailchimp的IP段可能会更新,记得定期查看官方文档维护白名单,避免突然无法抓取Feed。
测试建议
- 用curl模拟Mailchimp的请求:
curl -A "Mailchimp" https://your-site.com/feed/,应该能正常返回Feed内容 - 直接在浏览器访问Feed URL,应该会看到403错误,确认限制生效
内容的提问来源于stack exchange,提问作者Enzo
相关产品推荐
相关产品推荐

