jeggy
December 25, 2019, 5:24am
1
I'm trying to create a redirect for a specific path, supporting both http and https as i have another middle that does catch all http request and forwards them to https.
site:
image: containous/whoami
networks:
- public
deploy:
labels:
- "traefik.http.routers.helloworld.rule=Host(`jebster.net`)"
- "traefik.http.routers.helloworld.entrypoints=websecure"
- "traefik.http.routers.helloworld.tls.certresolver=le"
- "traefik.http.services.helloworld.loadbalancer.server.port=80"
# Tested and works here: https://play.golang.org/p/jS5pDAoJiQ_i
- "traefik.http.middlewares.gamlihandil-redirect.replacepathregex.regex=^?jebster.net/gh/perbondi/(.*)"
- "traefik.http.middlewares.gamlihandil-redirect.replacepathregex.replacement=gh.jebster.net/$$1"
- "traefik.http.routers.helloworld.middlewares=gamlihandil-redirect"
It shows correctly on the Dashboard:
As seen on the picture you can correctly see the regex rule there. And here's a sample of what I want working: https://play.golang.org/p/jS5pDAoJiQ_i
ldez
December 25, 2019, 2:26pm
2
Hello,
replacepathregex
is made to replace the Path not the Host.
https://docs.traefik.io/v2.1/middlewares/replacepathregex/
Your router match the host jebster.net
and you are trying to redirect to gh.jebster.net
.
But you don't have any router that match gh.jebster.net
.
You have to use redirectregex
instead of replacepathregex
https://docs.traefik.io/v2.1/middlewares/redirectregex/
An simple example with self-signed cert and locahost's domains:
version: "3.7"
services:
traefik:
image: traefik:v2.1.1
command: >
--log.level=INFO
--api
--providers.docker.exposedbydefault=false
--entrypoints.web.address=:80
--entrypoints.websecure.address=:443
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock
labels:
traefik.enable: true
traefik.http.routers.traefik.rule: "Host(`traefik.localhost`)"
traefik.http.routers.traefik.entrypoints: web
traefik.http.routers.traefik.service: api@internal
whoami:
image: containous/whoami
labels:
traefik.enable: true
traefik.http.routers.helloworld.rule: HostRegexp(`{sub:(gh\.)?}jebster.localhost`)
traefik.http.routers.helloworld.entrypoints: websecure
traefik.http.routers.helloworld.tls: true
# traefik.http.routers.helloworld.tls.certresolver: le
# traefik.http.routers.helloworld.tls.domains[0].main: jebster.localhost
# traefik.http.routers.helloworld.tls.domains[0].sans: gh.jebster.localhost
traefik.http.routers.helloworld.middlewares: gamlihandil-redirect
traefik.http.middlewares.gamlihandil-redirect.redirectregex.regex: ^https://jebster\.localhost/gh/perbondi/(.*)
traefik.http.middlewares.gamlihandil-redirect.redirectregex.replacement: https://gh.jebster.localhost/$$1
1 Like
jeggy
December 26, 2019, 1:31am
3
That works. But this broke the other router that I have deployed which has:
"traefik.http.routers.gamlihandil.rule=Host(
gh.jebster.net)"
jeggy
December 26, 2019, 1:42am
4
Got it working with:
site:
image: containous/whoami
networks:
- public
deploy:
labels:
- "traefik.http.routers.helloworld.rule=Host(`jebster.net`)"
- "traefik.http.routers.helloworld.entrypoints=websecure"
- "traefik.http.routers.helloworld.tls.certresolver=le"
- "traefik.http.services.helloworld.loadbalancer.server.port=80"
- "traefik.http.middlewares.gamlihandil-redirect.redirectregex.regex=^https://jebster\\.net/gh/perbondi/(.*)"
- "traefik.http.middlewares.gamlihandil-redirect.redirectregex.replacement=https://gh.jebster.net/$$1"
- "traefik.http.routers.helloworld.middlewares=gamlihandil-redirect"
Thanks for the help