You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为客户开发私有登录网站,如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:05:03