diff --git a/src/Middleware/Rewrite/src/Internal/ApacheModRewrite/ApacheModRewriteRule.cs b/src/Middleware/Rewrite/src/Internal/ApacheModRewrite/ApacheModRewriteRule.cs index 32be7fe80d..04abcb1221 100644 --- a/src/Middleware/Rewrite/src/Internal/ApacheModRewrite/ApacheModRewriteRule.cs +++ b/src/Middleware/Rewrite/src/Internal/ApacheModRewrite/ApacheModRewriteRule.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Collections.Generic; @@ -39,6 +39,8 @@ namespace Microsoft.AspNetCore.Rewrite.Internal.ApacheModRewrite context.Logger?.ModRewriteNotMatchedRule(); return; } + + condBackReferences = condResult.BackReferences; } // At this point, we know our rule passed, first apply pre conditions, @@ -51,4 +53,4 @@ namespace Microsoft.AspNetCore.Rewrite.Internal.ApacheModRewrite } } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/test/ApacheModRewrite/ModRewriteMiddlewareTest.cs b/src/Middleware/Rewrite/test/ApacheModRewrite/ModRewriteMiddlewareTest.cs index f22f340f18..67deba236d 100644 --- a/src/Middleware/Rewrite/test/ApacheModRewrite/ModRewriteMiddlewareTest.cs +++ b/src/Middleware/Rewrite/test/ApacheModRewrite/ModRewriteMiddlewareTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; @@ -308,5 +308,25 @@ namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite Assert.Equal("/foo", response.Headers.Location.OriginalString); } + + [Fact] + public async Task CapturedVariablesInConditionsArePreservedToRewriteRule() + { + var options = new RewriteOptions().AddApacheModRewrite(new StringReader(@"RewriteCond %{REQUEST_URI} /home +RewriteCond %{QUERY_STRING} report_id=(.+) +RewriteRule (.*) http://localhost:80/home/report/%1 [R=301,L,QSD]")); + var builder = new WebHostBuilder().Configure(app => + { + app.UseRewriter(options); + app.Run(context => context.Response.WriteAsync( + context.Request.Path + + context.Request.QueryString)); + }); + + var server = new TestServer(builder) { BaseAddress = new Uri("http://localhost:5000/foo") }; + var response = await server.CreateClient().GetAsync("/home?report_id=123"); + + Assert.Equal("http://localhost:80/home/report/123", response.Headers.Location.OriginalString); + } } }