diff --git a/packages/next/next-server/lib/router/router.ts b/packages/next/next-server/lib/router/router.ts index 5eeb52da7e5fedd..d367a16db2eb3f3 100644 --- a/packages/next/next-server/lib/router/router.ts +++ b/packages/next/next-server/lib/router/router.ts @@ -813,12 +813,7 @@ export default class Router implements BaseRouter { this._resolveHref(parsedHref, pages) if (pages.includes(parsedHref.pathname)) { - return this.change( - 'replaceState', - destination, - destination, - options - ) + return this.change(method, destination, destination, options) } } diff --git a/test/integration/gssp-redirect/test/index.test.js b/test/integration/gssp-redirect/test/index.test.js index bdbb842bd51c622..5121bdc0f85d67d 100644 --- a/test/integration/gssp-redirect/test/index.test.js +++ b/test/integration/gssp-redirect/test/index.test.js @@ -123,6 +123,10 @@ const runTests = () => { window.next.router.push('/gssp-blog/redirect-dest-_another') })()`) await browser.waitForElementByCss('#another') + + const text = await browser.elementByCss('#another').text() + + expect(text).toEqual('another Page') }) it('should apply redirect when GSSP page is navigated to client-side (external)', async () => { @@ -149,6 +153,10 @@ const runTests = () => { window.next.router.push('/gsp-blog/redirect-dest-_another') })()`) await browser.waitForElementByCss('#another') + + const text = await browser.elementByCss('#another').text() + + expect(text).toEqual('another Page') }) it('should apply redirect when GSP page is navigated to client-side (external)', async () => { @@ -167,6 +175,94 @@ const runTests = () => { }, }) }) + + it('should not replace history of the origin page when GSSP page is navigated to client-side (internal normal)', async () => { + const browser = await webdriver(appPort, '/another?mark_as=root') + + await browser.eval(`(function () { + window.location.href = '/' + })()`) + await browser.waitForElementByCss('#index') + + await browser.eval(`(function () { + window.next.router.push('/gssp-blog/redirect-dest-_another') + })()`) + await browser.waitForElementByCss('#another') + + await browser.eval(`(function () { + window.history.back() + })()`) + + const curUrl = await browser.url() + const { path } = url.parse(curUrl) + expect(path).toEqual('/') + }) + + it('should not replace history of the origin page when GSSP page is navigated to client-side (external)', async () => { + const browser = await webdriver(appPort, '/another?mark_as=root') + + await browser.eval(`(function () { + window.location.href = '/' + })()`) + await browser.waitForElementByCss('#index') + + await browser.eval(`(function () { + window.next.router.push('/gssp-blog/redirect-dest-_gssp-blog_first') + })()`) + await browser.waitForElementByCss('#gssp') + + await browser.eval(`(function () { + window.history.back() + })()`) + + const curUrl = await browser.url() + const { path } = url.parse(curUrl) + expect(path).toEqual('/') + }) + + it('should not replace history of the origin page when GSP page is navigated to client-side (internal)', async () => { + const browser = await webdriver(appPort, '/another?mark_as=root') + + await browser.eval(`(function () { + window.location.href = '/' + })()`) + await browser.waitForElementByCss('#index') + + await browser.eval(`(function () { + window.next.router.push('/gsp-blog/redirect-dest-_another') + })()`) + await browser.waitForElementByCss('#another') + + await browser.eval(`(function () { + window.history.back() + })()`) + + const curUrl = await browser.url() + const { path } = url.parse(curUrl) + expect(path).toEqual('/') + }) + + it('should not replace history of the origin page when GSP page is navigated to client-side (external)', async () => { + const browser = await webdriver(appPort, '/another?mark_as=root') + + await browser.eval(`(function () { + window.location.href = '/' + })()`) + await browser.waitForElementByCss('#index') + + await browser.eval(`(function () { + window.next.router.push('/gsp-blog/redirect-dest-_gsp-blog_first') + })()`) + await browser.waitForElementByCss('#gsp') + + await browser.eval(`(function () { + window.history.back() + })()`) + + const curUrl = await browser.url() + const { path } = url.parse(curUrl) + expect(path).toEqual('/') + }) } describe('GS(S)P Redirect Support', () => {