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

WordPress API请求遭CORS拦截,Angular调用问题排查求助

解决WordPress REST API CORS拦截问题

问题根源分析

你遇到的错误核心是:服务端的预请求响应里没有明确允许Content-Type请求头,同时你的Angular客户端错误地添加了属于服务端的CORS响应头,这些头在请求里毫无作用。

第一步:修正Angular客户端代码

删掉请求中多余的CORS响应头(这些是服务端返回给浏览器的,客户端加了白加),而且GET请求不需要Content-Type头(除非你在请求体传数据,这里GET请求不需要),精简后的代码:

export class WpGetCurrentUserService {

  private apiUrl = 'https://mors.sg-host.com/wp-json';
  private accessToken = 'uN...UU';

  constructor(private http: HttpClient) { }

  getCurrentUser(): Observable<any> {
    // 只保留必要的Authorization头
    const headers = new HttpHeaders()
      .set('Authorization', `Bearer ${this.accessToken}`);

    return this.http.get(`${this.apiUrl}/wp/v2/users/me`, { headers });
  }
}

第二步:完善WordPress服务端CORS配置(.htaccess)

之前的.htaccess只配置了允许跨域源,没处理预请求(OPTIONS)和允许的请求头,这是关键缺失。替换成以下完整配置:

<IfModule mod_headers.c>
    # 开发环境暂时允许localhost:8100,生产环境换成你的正式域名
    Header set Access-Control-Allow-Origin "http://localhost:8100"
    # 允许的请求方法
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    # 明确允许需要的请求头,包含Authorization和Content-Type
    Header set Access-Control-Allow-Headers "Authorization, Content-Type"
    # 允许携带凭证(WordPress应用密码认证需要)
    Header set Access-Control-Allow-Credentials "true"
</IfModule>

# 直接响应OPTIONS预请求,避免WordPress处理导致配置失效
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]
</IfModule>

# 保留你的缓存禁用配置
<IfModule mod_headers.c>
    Header set Cache-Control "private"
</IfModule>

备选方案:通过WordPress代码配置CORS

如果.htaccess配置在SiteGround上依然无效,可以尝试在主题的functions.php中添加以下代码,直接通过WordPress REST API钩子设置CORS头:

add_action('rest_api_init', function () {
    // 移除默认的CORS头设置,避免冲突
    remove_filter('rest_pre_serve_request', 'rest_send_cors_headers');
    // 添加自定义CORS配置
    add_filter('rest_pre_serve_request', function ($value) {
        header('Access-Control-Allow-Origin: http://localhost:8100');
        header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
        header('Access-Control-Allow-Headers: Authorization, Content-Type');
        header('Access-Control-Allow-Credentials: true');
        return $value;
    });
}, 15);

额外注意事项

  • 修改配置后,一定要清空SiteGround的SuperCacher缓存(可以在SiteGround后台操作,或者联系客服),否则旧的缓存配置会生效。
  • 生产环境不要用*作为允许的源,换成你的正式域名,避免安全风险。

内容的提问来源于stack exchange,提问作者Mor Sagmon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:14:55