diff --git a/src/Geta.404Handler/Core/CustomRedirects/CustomRedirectCollection.cs b/src/Geta.404Handler/Core/CustomRedirects/CustomRedirectCollection.cs
index 2be62a3..66a5ba1 100644
--- a/src/Geta.404Handler/Core/CustomRedirects/CustomRedirectCollection.cs
+++ b/src/Geta.404Handler/Core/CustomRedirects/CustomRedirectCollection.cs
@@ -144,7 +144,7 @@ string RemoveSlash(string s)
}
var redirCopy = new CustomRedirect(cr);
- var newUrl = AppendSlash(redirCopy.NewUrl);
+ var newUrl = url.IndexOf("?", StringComparison.Ordinal) > 0 ? redirCopy.NewUrl : AppendSlash(redirCopy.NewUrl);
var appendSegment = RemoveSlash(url.Substring(oldUrl.Length));
redirCopy.NewUrl = $"{newUrl}{appendSegment}";
return redirCopy;
diff --git a/tests/Geta.404Handler.Tests/CustomRedirectCollectionTests.cs b/tests/Geta.404Handler.Tests/CustomRedirectCollectionTests.cs
index c124919..be6cb04 100644
--- a/tests/Geta.404Handler.Tests/CustomRedirectCollectionTests.cs
+++ b/tests/Geta.404Handler.Tests/CustomRedirectCollectionTests.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Web;
using BVNetwork.NotFound.Core;
@@ -276,5 +276,65 @@ public void Find_gives_nullreferenceexception_with_partial_deleted_hit()
Assert.NotNull(actual);
}
+
+ ///
+ /// https://github.com/Geta/404handler/issues/171
+ ///
+ [Fact]
+ public void Find_does_not_add_slash_when_querystring_parameter()
+ {
+ var collection = new CustomRedirectCollection
+ {
+ new CustomRedirect("/content/file", "/legacy"),
+ new CustomRedirect("/content/file/", "/legacy/")
+ };
+
+ var urlToFind = "/content/file?doc=filename";
+ var expected = "/legacy?doc=filename";
+
+ var actual = collection.Find(urlToFind.ToUri());
+
+ Assert.Equal(expected, actual.NewUrl);
+ }
+
+ ///
+ /// https://github.com/Geta/404handler/issues/171
+ ///
+ [Fact]
+ public void Find_does_keep_slash_when_querystring_parameter()
+ {
+ var collection = new CustomRedirectCollection
+ {
+ new CustomRedirect("/content/file", "/legacy"),
+ new CustomRedirect("/content/file/", "/legacy/")
+ };
+
+ var urlToFind = "/content/file/?doc=filename";
+ var expected = "/legacy/?doc=filename";
+
+ var actual = collection.Find(urlToFind.ToUri());
+
+ Assert.Equal(expected, actual.NewUrl);
+ }
+
+ ///
+ /// https://github.com/Geta/404handler/issues/171
+ ///
+ [Fact]
+ public void Find_does_not_add_slash_when_querystring_parameters()
+ {
+ var collection = new CustomRedirectCollection
+ {
+ new CustomRedirect("/content/file", "/legacy"),
+ new CustomRedirect("/content/file/", "/legacy/")
+ };
+
+ var urlToFind = "/content/file?doc=filename¶m2=value";
+ var expected = "/legacy?doc=filename¶m2=value";
+
+ var actual = collection.Find(urlToFind.ToUri());
+
+ Assert.Equal(expected, actual.NewUrl);
+ }
}
-}
\ No newline at end of file
+}