| File: RedirectToNonWwwRule.cs | Web Access |
| Project: src\aspnetcore\src\Middleware\Rewrite\src\Microsoft.AspNetCore.Rewrite.csproj (Microsoft.AspNetCore.Rewrite) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Rewrite.Logging; namespace Microsoft.AspNetCore.Rewrite; internal sealed class RedirectToNonWwwRule : IRule { private const string WwwDot = "www."; private readonly string[]? _domains; private readonly int _statusCode; public RedirectToNonWwwRule(int statusCode) { _statusCode = statusCode; } public RedirectToNonWwwRule(int statusCode, params string[] domains) { ArgumentNullException.ThrowIfNull(domains); if (domains.Length < 1) { throw new ArgumentException($"One or more {nameof(domains)} must be provided."); } _domains = domains; _statusCode = statusCode; } public void ApplyRule(RewriteContext context) { var request = context.HttpContext.Request; var hostInDomains = RedirectToWwwHelper.IsHostInDomains(request, _domains); if (!hostInDomains) { context.Result = RuleResult.ContinueRules; return; } if (!request.Host.HasValue || !request.Host.Value.StartsWith(WwwDot, StringComparison.OrdinalIgnoreCase)) { context.Result = RuleResult.ContinueRules; return; } RedirectToWwwHelper.SetRedirect( context, new HostString(request.Host.Value.Substring(4)), // We verified the hostname begins with "www." already. _statusCode); context.Logger.RedirectedToNonWww(); } }