diff --git a/packages/vue-app/template/server.js b/packages/vue-app/template/server.js
index a7a13e3638..c030476123 100644
--- a/packages/vue-app/template/server.js
+++ b/packages/vue-app/template/server.js
@@ -50,7 +50,7 @@ const createNext = ssrContext => (opts) => {
opts.path = urlJoin(routerBase, opts.path)
}
// Avoid loop redirect
- if (opts.path === ssrContext.url) {
+ if (decodeURIComponent(opts.path) === ssrContext.url) {
ssrContext.redirected = false
return
}
diff --git a/test/e2e/basic.browser.test.js b/test/e2e/basic.browser.test.js
index 58dd343b76..46cd0b10c0 100644
--- a/test/e2e/basic.browser.test.js
+++ b/test/e2e/basic.browser.test.js
@@ -319,6 +319,11 @@ describe('basic browser', () => {
page.close()
})
+ test('/redirection/no loop', async () => {
+ const page = await browser.page(url('/redirection/no loop'))
+ expect(await page.$text('h1')).toContain('Redirected page')
+ })
+
// Close server and ask nuxt to stop listening to file changes
afterAll(async () => {
await nuxt.close()
diff --git a/test/fixtures/basic/pages/redirection/_slug.vue b/test/fixtures/basic/pages/redirection/_slug.vue
new file mode 100644
index 0000000000..085a77b76b
--- /dev/null
+++ b/test/fixtures/basic/pages/redirection/_slug.vue
@@ -0,0 +1,18 @@
+
+
+ Redirected page
+
+
+
+