Почему у меня не работает перенаправление с www на версию без www в Traefik?

У меня возникла проблема с редиректами для адресов с www. Когда я перехожу по ссылке <a href="http://www.traefik-server.mystudio.studio" rel="nofollow">www.traefik-server.mystudio.studio</a>, я автоматически перенаправляюсь на <a href="https://www.traefik-server.mystudio.studio" rel="nofollow">https://www.traefik-server.mystudio.studio</a>, что вызывает ошибку. Как можно настроить редирект так, чтобы он направлял на <a href="https://traefik-server.mystudio.studio" rel="nofollow">https://traefik-server.mystudio.studio</a>? Заранее спасибо! 

Вот часть конфигурации: 
<pre><code class="yaml">services:
  traefik:
    image: traefik:v3.3.5
    container_name: traefik
    command:
      - "--api.dashboard=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--entrypoints.web.http.redirections.entrypoint.permanent=true"
      - "--certificatesresolvers.myresolver.acme.email=mymail@yandex.ru"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
    labels:
      - "traefik.enable=true"

      - "traefik.http.middlewares.redirect-www-to-root.redirectregex.regex=^https?://www\\.(.+)"
      - "traefik.http.middlewares.redirect-www-to-root.redirectregex.replacement=https://$1"
      - "traefik.http.middlewares.redirect-www-to-root.redirectregex.permanent=true"

      - "traefik.http.routers.redirect-www.rule=HostRegexp(`www.{domain:[^/]+}`)"
      </code></pre>
  • 11 апреля 2025 г. 8:05
Ответы на вопрос 3
Чтобы настроить перенаправление с `www` на версию без `www` в Traefik, вам нужно убедиться, что ваш роутер настроен правильно и что редирект Middleware применяется. В вашем коде видно, что вы уже создали Middleware для редиректа, но отсутствует связка его с роутером. Давайте улучшим вашу конфигурацию, добавив необходимое соединение.

Вот пример, как вы можете это сделать:

```yaml
services:
  traefik:
    image: traefik:v3.3.5
    container_name: traefik
    command:
      - "--api.dashboard=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.email=mymail@yandex.ru"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
    labels:
      - "traefik.enable=true"

      # Middleware для редиректа с www на корень
      - "traefik.http.middlewares.redirect-www-to-root.redirectregex.regex=^https?://www\\.(.+)"
      - "traefik.http.middlewares.redirect-www-to-root.redirectregex.replacement=https://$1"
      - "traefik.http.middlewares.redirect-www-to-root.redirectregex.permanent=true"

      # Роутер для перенаправления www
      - "traefik.http.routers.redirect-www.rule=Host(`www.traefik-server.mystudio.studio`)"
      - "traefik.http.routers.redirect-www.middlewares=redirect-www-to-root"
      - "traefik.http.routers.redirect-www.entrypoints=web,websecure"

      # Основной роутер для вашего приложения
      - "traefik.http.routers.myapp.rule=Host(`traefik-server.mystudio.studio`)"
      - "traefik.http.routers.myapp.entrypoints=web,websecure"
      - "traefik.http.routers.myapp.tls=true"
      - "traefik.http.routers.myapp.tls.certresolver=myresolver"
```

Объяснение настроек:
1. **Middleware**: Мы создаем `redirect-www-to-root`, который выполняет редирект с `www` на корень.
2. **Роутер `redirect-www`**: Мы создаем отдельный роутер, который отвечает за перенаправление с `www`, связываем его с созданным Middleware и указываем, что он должен использовать как HTTP, так и HTTPS entrypoint.
3. **Основной роутер `myapp`**: Это ваш основной роутер для вашего приложения, который обслуживает запросы к версии без `www`.

С такой конфигурацией запросы к `http://www.traefik-server.mystudio.studio` будут редиректиться на `https://traefik-server.mystudio.studio` как и планировалось. Не забудьте после внесения изменений перезапустить контейнер Traefik.
Нашел такой вариант глобальный http -> https и www -> non-www 

На traefik:v3.3.5 все работает, но не глобально, а на уровне сервиса.

Если кто-то найдет реализацию на глобальном уровне, отпишитесь.
deepseek выдал такой конфиг для вашей проблемы 
diff configs
Похожие вопросы