diff --git a/core/base-service/redirector.js b/core/base-service/redirector.js
index c7334955891184d26c33089c137b6ca4b1fa64b1..1028f033a12413934563a1b98bc67f1c10671809 100644
--- a/core/base-service/redirector.js
+++ b/core/base-service/redirector.js
@@ -82,7 +82,7 @@ module.exports = function redirector(attrs) {
         trace.logTrace('inbound', emojic.ticket, 'Named params', namedParams)
         trace.logTrace('inbound', emojic.crayon, 'Query params', queryParams)
 
-        const targetPath = transformPath(namedParams)
+        const targetPath = encodeURI(transformPath(namedParams))
         trace.logTrace('validate', emojic.dart, 'Target', targetPath)
 
         let urlSuffix = ask.uri.search || ''
diff --git a/core/base-service/redirector.spec.js b/core/base-service/redirector.spec.js
index 57402e623251e946accf483fd5a026291d07da4e..ef051723cbece897bb835c787898aa10adf9ca76 100644
--- a/core/base-service/redirector.spec.js
+++ b/core/base-service/redirector.spec.js
@@ -121,6 +121,20 @@ describe('Redirector', function () {
       )
     })
 
+    it('should correctly encode the redirect URL', async function () {
+      const { statusCode, headers } = await got(
+        `${baseUrl}/very/old/service/hello%0Dworld.svg?foobar=a%0Db`,
+        {
+          followRedirect: false,
+        }
+      )
+
+      expect(statusCode).to.equal(301)
+      expect(headers.location).to.equal(
+        '/new/service/hello%0Dworld.svg?foobar=a%0Db'
+      )
+    })
+
     describe('transformQueryParams', function () {
       const route = {
         base: 'another/old/service',