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

基于GCP负载均衡实现无服务器式域名自动加www前缀重定向咨询

无服务器方案实现自动添加www前缀的域名重定向

当然可以用无服务器方案实现批量自动重定向,无需逐个配置主机。以下是几个主流的可靠方案:

Cloudflare Workers(推荐,配置简单)

适合将域名托管在Cloudflare的场景,无需额外服务器资源:

  • 把你的域名DNS解析切换到Cloudflare,并开启代理模式
  • 创建新的Cloudflare Worker,替换代码为:
    addEventListener('fetch', event => {
      event.respondWith(handleRequest(event.request))
    })
    
    async function handleRequest(request) {
      const url = new URL(request.url)
      // 仅处理不带www的根域名(如需跳过子域名可添加额外判断)
      if (!url.hostname.startsWith('www.')) {
        url.hostname = 'www.' + url.hostname
        return Response.redirect(url.toString(), 301)
      }
      return fetch(request)
    }
    
  • 将Worker绑定到你的域名(可选择整个域名或通配符模式,如*.yourdomain.com)
  • 测试:访问不带www的域名,会自动跳转至带www的HTTPS地址

AWS Lambda@Edge(AWS生态用户首选)

前提是域名托管在Route 53,并使用CloudFront作为CDN:

  1. 在us-east-1区域创建Lambda函数(Lambda@Edge要求此区域)
  2. 编写Node.js代码:
    exports.handler = (event, context, callback) => {
      const request = event.Records[0].cf.request;
      const host = request.headers.host[0].value;
      
      if (!host.startsWith('www.')) {
        const newHost = 'www.' + host;
        const redirectUrl = `https://${newHost}${request.uri}${request.querystring ? '?' + request.querystring : ''}`;
        
        const response = {
          status: '301',
          statusDescription: 'Moved Permanently',
          headers: {
            location: [{ key: 'Location', value: redirectUrl }]
          }
        };
        callback(null, response);
      }
      callback(null, request);
    };
    
  3. 发布Lambda版本,关联到CloudFront分配的「Viewer Request」事件
  4. 确保CloudFront的SSL证书覆盖www.yourdomain.com和yourdomain.com
  5. 验证重定向效果

腾讯云Serverless云函数(国内用户可选)

适合依赖腾讯云生态的场景:

  1. 创建HTTP触发的云函数,使用Python代码示例:
    from urllib.parse import urlparse
    
    def main_handler(event, context):
      request_url = event['request_url']
      url_obj = urlparse(request_url)
      hostname = url_obj.hostname
      
      if not hostname.startswith('www.'):
        new_hostname = 'www.' + hostname
        new_url = url_obj._replace(netloc=new_hostname).geturl()
        return {
          'statusCode': 301,
          'headers': {'Location': new_url},
          'body': ''
        }
      return {'statusCode': 200, 'body': 'OK'}
    
  2. 将域名DNS解析指向云函数触发地址,或结合腾讯云CDN配置转发规则
  3. 配置覆盖双域名的HTTPS证书

注意事项

  • 统一使用301永久重定向,利于搜索引擎优化;若需临时调整可改为302
  • 必须确保SSL证书同时覆盖带www和不带www的域名,避免访问时出现证书错误
  • 若需要排除特定子域名的重定向,可在代码中添加判断逻辑(例如跳过api.yourdomain.com)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:20:13