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

Traefik配置www转非www重定向时出现404错误求助

问题分析与解决

访问www.example.com返回404的核心原因是:没有任何Traefik路由器匹配www.example.com这个域名。你当前的wordpress路由器仅匹配非www的${ENV_HOST}域名,当请求www域名时,Traefik找不到对应的路由规则,直接返回404,此时你配置的redirect-www中间件根本没有机会执行。

解决方案

方案1:修改现有路由器规则,同时匹配www与非www域名

修改wordpress服务的traefik.http.routers.wordpress.rule标签,让它同时匹配两个域名:

labels:
  - "traefik.enable=true"
  - "traefik.http.routers.wordpress.tls=true"
  - "traefik.http.routers.wordpress.entrypoints=https"
  - "traefik.http.routers.wordpress.middlewares=redirect-www@file"
  - "traefik.http.routers.wordpress.rule=Host(`${ENV_HOST}`, `www.${ENV_HOST}`)"

这样,无论是访问非www还是www域名,都会匹配到这个路由器,然后通过redirect-www中间件将www请求重定向到非www地址。

方案2:新增独立的www域名路由器

给wordpress服务添加额外的标签,创建一个专门匹配www域名的路由器,同样应用重定向中间件:

labels:
  - "traefik.enable=true"
  # 原有非www路由器配置
  - "traefik.http.routers.wordpress.tls=true"
  - "traefik.http.routers.wordpress.entrypoints=https"
  - "traefik.http.routers.wordpress.middlewares=redirect-www@file"
  - "traefik.http.routers.wordpress.rule=Host(`${ENV_HOST}`)"
  # 新增www路由器配置
  - "traefik.http.routers.wordpress-www.tls=true"
  - "traefik.http.routers.wordpress-www.entrypoints=https"
  - "traefik.http.routers.wordpress-www.middlewares=redirect-www@file"
  - "traefik.http.routers.wordpress-www.rule=Host(`www.${ENV_HOST}`)"
  - "traefik.http.routers.wordpress-www.service=wordpress@docker"

这个方案将两个域名的路由规则分开,但最终都指向同一个WordPress服务,并执行重定向逻辑。

额外注意事项

检查你的redirect-www中间件正则表达式:在YAML配置中,双引号内的反斜杠需要转义,否则可能导致正则解析异常。建议将中间件的正则部分修改为:

http:
  middlewares:
    redirect-www:
      redirectRegex:
        regex: "^(https:\\/\\/)?www\\.(.+)"
        replacement: "https://${2}"
        permanent: true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:52:47