I tried your configuration:
with HTTP provider:
DEBU[2022-11-28T09:20:23+01:00] Static configuration loaded {"global":{"checkNewVersion":true},"serversTransport":{"maxIdleConnsPerHost":200},"entryPoints":{"web":{"address":":8081","transport":{"lifeCycle":{"graceTimeOut":"10s"},"respondingTimeouts":{"idleTimeout":"3m0s"}},"forwardedHeaders":{},"http":{},"http2":{"maxConcurrentStreams":250},"udp":{"timeout":"3s"}}},"providers":{"providersThrottleDuration":"2s","docker":{"watch":true,"endpoint":"unix:///var/run/docker.sock","defaultRule":"Host(`{{ normalize .Name }}`)","exposedByDefault":true,"swarmModeRefreshSeconds":"15s"},"http":{"endpoint":"http://localhost:9090","pollInterval":"5s","pollTimeout":"5s"}},"log":{"level":"debug","format":"common"}}
INFO[2022-11-28T09:20:23+01:00]
Stats collection is disabled.
Help us improve Traefik by turning this feature on :)
More details on: https://doc.traefik.io/traefik/contributing/data-collection/
INFO[2022-11-28T09:20:23+01:00] Starting provider aggregator aggregator.ProviderAggregator
DEBU[2022-11-28T09:20:23+01:00] Starting TCP Server entryPointName=web
INFO[2022-11-28T09:20:23+01:00] Starting provider *http.Provider
DEBU[2022-11-28T09:20:23+01:00] *http.Provider provider configuration: {"endpoint":"http://localhost:9090","pollInterval":"5s","pollTimeout":"5s"}
INFO[2022-11-28T09:20:23+01:00] Starting provider *docker.Provider
DEBU[2022-11-28T09:20:23+01:00] *docker.Provider provider configuration: {"watch":true,"endpoint":"unix:///var/run/docker.sock","defaultRule":"Host(`{{ normalize .Name }}`)","exposedByDefault":true,"swarmModeRefreshSeconds":"15s"}
INFO[2022-11-28T09:20:23+01:00] Starting provider *traefik.Provider
DEBU[2022-11-28T09:20:23+01:00] *traefik.Provider provider configuration: {}
INFO[2022-11-28T09:20:23+01:00] Starting provider *acme.ChallengeTLSALPN
DEBU[2022-11-28T09:20:23+01:00] *acme.ChallengeTLSALPN provider configuration: {}
DEBU[2022-11-28T09:20:23+01:00] Configuration received: {"http":{"services":{"noop":{}},"serversTransports":{"default":{"maxIdleConnsPerHost":200}}},"tcp":{},"udp":{},"tls":{}} providerName=internal
DEBU[2022-11-28T09:20:23+01:00] Configuration received: {"http":{"routers":{"whoami":{"service":"whoami","rule":"Host(`whoami.local`)"}},"services":{"whoami":{"loadBalancer":{"servers":[{"url":"http://whoami/"},{"url":"http://whoami/2"}],"passHostHeader":true}}}},"tcp":{},"udp":{},"tls":{}} providerName=http
With the file provider:
DEBU[2022-11-28T09:12:08+01:00] Static configuration loaded {"global":{"checkNewVersion":true},"serversTransport":{"maxIdleConnsPerHost":200},"entryPoints":{"web":{"address":":8081","transport":{"lifeCycle":{"graceTimeOut":"10s"},"respondingTimeouts":{"idleTimeout":"3m0s"}},"forwardedHeaders":{},"http":{},"http2":{"maxConcurrentStreams":250},"udp":{"timeout":"3s"}}},"providers":{"providersThrottleDuration":"2s","docker":{"watch":true,"endpoint":"unix:///var/run/docker.sock","defaultRule":"Host(`{{ normalize .Name }}`)","exposedByDefault":true,"swarmModeRefreshSeconds":"15s"},"file":{"directory":"./dyn/","watch":true}},"log":{"level":"debug","format":"common"}}
INFO[2022-11-28T09:12:08+01:00]
Stats collection is disabled.
Help us improve Traefik by turning this feature on :)
More details on: https://doc.traefik.io/traefik/contributing/data-collection/
INFO[2022-11-28T09:12:08+01:00] Starting provider aggregator aggregator.ProviderAggregator
DEBU[2022-11-28T09:12:08+01:00] Starting TCP Server entryPointName=web
INFO[2022-11-28T09:12:08+01:00] Starting provider *file.Provider
DEBU[2022-11-28T09:12:08+01:00] *file.Provider provider configuration: {"directory":"./dyn/","watch":true}
INFO[2022-11-28T09:12:08+01:00] Starting provider *traefik.Provider
DEBU[2022-11-28T09:12:08+01:00] *traefik.Provider provider configuration: {}
INFO[2022-11-28T09:12:08+01:00] Starting provider *acme.ChallengeTLSALPN
DEBU[2022-11-28T09:12:08+01:00] *acme.ChallengeTLSALPN provider configuration: {}
INFO[2022-11-28T09:12:08+01:00] Starting provider *docker.Provider
DEBU[2022-11-28T09:12:08+01:00] *docker.Provider provider configuration: {"watch":true,"endpoint":"unix:///var/run/docker.sock","defaultRule":"Host(`{{ normalize .Name }}`)","exposedByDefault":true,"swarmModeRefreshSeconds":"15s"}
DEBU[2022-11-28T09:12:08+01:00] Configuration received: {"http":{"routers":{"whoami":{"service":"whoami","rule":"Host(`whoami.local`)"}},"services":{"whoami":{"loadBalancer":{"servers":[{"url":"http://whoami/"},{"url":"http://whoami/2"}],"passHostHeader":true}}}},"tcp":{},"udp":{},"tls":{}} providerName=file
there is no parsing problem (take a look at "Configuration received:" lines).
So I think you have an invalid character in your real configuration.