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

如何通过Docker Compose的Traefik实现typersworld.com到www域名的路径重定向

解决方案:Traefik配置不带www到带www的域名重定向

以下是针对你的需求修改后的完整docker-compose.yaml配置,同时保留原有功能并实现指定的重定向规则:

version: '3.8'

networks:
  backend-net:
    external: false

volumes:
  letsencrypt:

services:
  reverse-proxy:
    image: traefik:v3.1
    command:
      - "--providers.docker"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.tlschallenge=true"
      - "--certificatesresolvers.myresolver.acme.email=bilalniamani001@gmail.com"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--api=true"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - letsencrypt:/letsencrypt
    networks:
      - backend-net

  frontend:
    image: bilawalnizamani/typing-game-frontend:latest
    env_file:
      - ./frontend.env
    init: true
    deploy:
      mode: replicated
      replicas: 2
    networks:
      - backend-net
    depends_on:
      backend:
        condition: service_healthy
    labels:
      - "traefik.enable=true"
      # 原有带www的业务路由
      - "traefik.http.routers.frontend.rule=Host(`www.typersworld.com`)"
      - "traefik.http.services.frontend.loadbalancer.server.port=3000"
      - "traefik.http.routers.frontend.entrypoints=websecure"
      - "traefik.http.routers.frontend.tls.certresolver=myresolver"
      - "traefik.http.routers.frontend.tls=true"
      # 新增不带www的域名捕获路由
      - "traefik.http.routers.frontend-nonwww.rule=Host(`typersworld.com`)"
      - "traefik.http.routers.frontend-nonwww.entrypoints=web,websecure"
      - "traefik.http.routers.frontend-nonwww.tls.certresolver=myresolver"
      - "traefik.http.routers.frontend-nonwww.tls=true"
      # 重定向中间件(永久重定向,对SEO友好)
      - "traefik.http.middlewares.redirect-to-www.redirectregex.regex=^https?://typersworld.com/(.*)"
      - "traefik.http.middlewares.redirect-to-www.redirectregex.replacement=https://www.typersworld.com/$1"
      - "traefik.http.middlewares.redirect-to-www.redirectregex.permanent=true"
      # 将中间件绑定到不带www的路由
      - "traefik.http.routers.frontend-nonwww.middlewares=redirect-to-www"
      - "com.centurylinklabs.watchtower.enable=true"
    restart: always

配置说明

  1. 新增frontend-nonwww路由:
    • 匹配所有访问typersworld.com的HTTP/HTTPS请求
    • 自动为typersworld.com申请Let's Encrypt证书,确保HTTPS请求正常处理
  2. redirect-to-www中间件:
    • 使用正则表达式捕获请求路径,将任意路径的请求永久重定向到带www的对应路径
    • permanent=true返回301状态码,符合SEO最佳实践
  3. 原有配置保留:继续维持HTTP到HTTPS的全局跳转,以及带www域名的业务路由功能

安全操作步骤(避免网站宕机)

  1. 备份当前配置文件:
    cp docker-compose.yaml docker-compose.backup.yaml
    
  2. 仅更新frontend服务(无需重启Traefik,减少中断风险):
    docker-compose up -d --no-deps frontend
    
  3. 等待2-3分钟,让ACME完成typersworld.com的证书颁发
  4. 测试重定向效果:
    # 测试HTTP不带www跳转
    curl -v http://typersworld.com/test-path
    # 测试HTTPS不带www跳转
    curl -v https://typersworld.com/test-path
    
    正常情况下会看到301跳转至https://www.typersworld.com/test-path
  5. 若出现异常,立即回滚配置:
    cp docker-compose.backup.yaml docker-compose.yaml
    docker-compose up -d --no-deps frontend
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:15:17