diff options
Diffstat (limited to 'src/SMAPI.Web/Framework/RewriteSubdomainRule.cs')
-rw-r--r-- | src/SMAPI.Web/Framework/RewriteSubdomainRule.cs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/SMAPI.Web/Framework/RewriteSubdomainRule.cs b/src/SMAPI.Web/Framework/RewriteSubdomainRule.cs index 5a56844f..cc183fe3 100644 --- a/src/SMAPI.Web/Framework/RewriteSubdomainRule.cs +++ b/src/SMAPI.Web/Framework/RewriteSubdomainRule.cs @@ -1,4 +1,7 @@ using System; +using System.Linq; +using System.Text.RegularExpressions; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Rewrite; namespace StardewModdingAPI.Web.Framework @@ -7,14 +10,29 @@ namespace StardewModdingAPI.Web.Framework /// <remarks>Derived from <a href="https://stackoverflow.com/a/44526747/262123" />.</remarks> internal class RewriteSubdomainRule : IRule { + /********* + ** Accessors + *********/ + /// <summary>The paths (excluding the hostname portion) to not rewrite.</summary> + public Regex[] ExceptPaths { get; set; } + + + /********* + ** Public methods + *********/ /// <summary>Applies the rule. Implementations of ApplyRule should set the value for <see cref="RewriteContext.Result" /> (defaults to RuleResult.ContinueRules).</summary> /// <param name="context">The rewrite context.</param> public void ApplyRule(RewriteContext context) { context.Result = RuleResult.ContinueRules; + HttpRequest request = context.HttpContext.Request; + + // check ignores + if (this.ExceptPaths?.Any(pattern => pattern.IsMatch(request.Path)) == true) + return; // get host parts - string host = context.HttpContext.Request.Host.Host; + string host = request.Host.Host; string[] parts = host.Split('.'); // validate @@ -24,7 +42,7 @@ namespace StardewModdingAPI.Web.Framework return; // prepend to path - context.HttpContext.Request.Path = $"/{parts[0]}{context.HttpContext.Request.Path}"; + request.Path = $"/{parts[0]}{request.Path}"; } } } |