BitBadger.AspNetCore.CanonicalDomains
View Source Repo
The Short Version
If multiple domains point to the same website, ensuring that links are served on a specific one can benefit both users and site maintainers. This middleware provides an application-focused way to enforce these canonical domains.
How to Use
First, install BitBadger.AspNetCore.CanonicalDomains from NuGet.
Second, add the configuration for each domain that needs to be redirected; this middleware will configure itself via the details in the CanonicalDomains
configuration key. An example:
{ "CanonicalDomains": [ { "From": "www.example.com", "To": "example.com" }, { "From": "web.example.com", "To": "example.com" } ] }
Finally, in your main source file (Program.cs
, App.fs
, etc.), import the namespace BitBadger.AspNetCore.CanonicalDomains
, and call .UseCanonicalDomains()
on the IApplicationBuilder
instance. It should be placed after .UseForwardedHeaders()
, if that is used, but should be ahead of .UseStaticFiles()
, auth config, endpoints, etc. It should be run as close to the start of the pipeline as possible, as no other processing should take place until the request is made on the canonical domain.
Caveats
If the ASP.NET Core application is running behind a reverse proxy (Nginx, Apache, IIS, etc.), enforcing these domains at that point is the most efficient. This middleware is designed for scenarios where the application is being served directly or in a container, with multiple domains pointed at the running application.
Troubleshooting
This middleware will not throw errors if it cannot parse its configuration properly (feel free to do the final step before adding configuration to verify!). However, if .UseCanonicalDomains()
is called, and the setup does not find anything to do, it will emit a warning in the log, and will not add the middleware to the pipeline. If redirection is not occurring as you suspect it should, check the top of the log when the application starts.
Feedback
Questions and suggestions can be sent via issues on the project's repository.