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

在GCP/GKE上将apex域名(www)301重定向至非apex主域名

解决GCP原生Ingress的www到非www 301重定向问题

针对GCP原生Ingress(gce类型),无法像Nginx Ingress那样用注解快速配置重定向,你可以通过以下几种方案实现www.domain.com到domain.com的301永久重定向,解决SEO内容重复问题:

方案1:通过URL Map配置全局重定向规则

GCP原生Ingress的流量路由依赖URL Map,你可以直接在URL Map中定义重定向规则:

  1. 创建包含重定向规则的URL Map
    使用Kubernetes CRD创建URL Map,匹配www.domain.com的所有请求并跳转:

    apiVersion: compute.cnrm.cloud.google.com/v1beta1
    kind: ComputeURLMap
    metadata:
      name: domain-redirect-urlmap
    spec:
      defaultService:
        external: projects/[你的GCP项目ID]/global/backendServices/[你的主服务Backend Service名称]
      hostRules:
      - hosts: ["www.domain.com"]
        pathMatcher: www-to-root-redirect
      pathMatchers:
      - name: www-to-root-redirect
        defaultRedirect:
          hostRedirect: domain.com
          redirectResponseCode: MOVED_PERMANENTLY_301
          stripQuery: false # 保留原请求的查询参数
    
  2. 将URL Map关联到Ingress
    在你的Ingress资源中指定使用该URL Map,也可通过GCP控制台手动绑定到Ingress对应的负载均衡器:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: main-app-ingress
      annotations:
        kubernetes.io/ingress.class: "gce"
    spec:
      tls:
      - hosts: ["domain.com", "www.domain.com"]
        secretName: domain-tls-secret # 确保证书包含两个域名
      rules:
      - host: domain.com
        http:
          paths:
          - path: /*
            pathType: ImplementationSpecific
            backend:
              service:
                name: your-main-app-service
                port: {number: 80}
      - host: www.domain.com
        http:
          paths:
          - path: /*
            pathType: ImplementationSpecific
            backend:
              service:
                name: your-main-app-service
                port: {number: 80}
    

方案2:使用Backend Config配置服务级重定向

创建专门的Backend Config定义重定向策略,关联到处理www域名的Service:

  1. 创建重定向Backend Config

    apiVersion: cloud.google.com/v1
    kind: BackendConfig
    metadata:
      name: www-redirect-config
    spec:
      redirect:
        hostRedirect: domain.com
        redirectResponseCode: MOVED_PERMANENTLY_301
        stripQuery: false
    
  2. 关联到Service
    在处理www请求的Service中添加注解绑定Backend Config:

    apiVersion: v1
    kind: Service
    metadata:
      name: www-redirect-service
      annotations:
        cloud.google.com/backend-config: '{"default": "www-redirect-config"}'
    spec:
      type: NodePort
      selector: {app: your-main-app}
      ports: [{port: 80, targetPort: 80}]
    
  3. 更新Ingress规则
    在Ingress中为www.domain.com配置指向该Service的路由:

    # 补充到Ingress的spec.rules中
    - host: www.domain.com
      http:
        paths:
        - path: /*
          pathType: ImplementationSpecific
          backend:
            service:
              name: www-redirect-service
              port: {number: 80}
    

方案3:Cloud CDN重定向规则(适合已启用CDN的场景)

如果你的应用已经配置了Cloud CDN,可以直接在负载均衡器的CDN规则中添加重定向:

  • 进入GCP控制台的负载均衡器页面,找到对应Ingress的负载均衡器
  • 切换到规则标签,点击添加规则
  • 设置匹配条件为主机等于 www.domain.com,动作选择重定向到URL,填入https://domain.com${request_uri},响应码选择301 永久移动
  • 保存规则后,CDN会自动处理所有匹配请求的跳转

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:13:22