From c230eff482ed609450021a36c6c7c6911d5048c9 Mon Sep 17 00:00:00 2001 From: Emanuele Stoppa Date: Wed, 16 Apr 2025 11:33:51 +0100 Subject: [PATCH] fix(routing): rewrite regression --- .changeset/orange-cloths-camp.md | 5 ++++ packages/astro/src/core/routing/rewrite.ts | 2 +- .../rewrite-issue-13633/astro.config.mjs | 8 ++++++ .../fixtures/rewrite-issue-13633/package.json | 8 ++++++ .../rewrite-issue-13633/src/middleware.js | 4 +++ .../rewrite-issue-13633/src/pages/about.astro | 12 +++++++++ .../rewrite-issue-13633/src/pages/index.astro | 12 +++++++++ packages/astro/test/rewrite.test.js | 25 +++++++++++++++++++ pnpm-lock.yaml | 6 +++++ 9 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 .changeset/orange-cloths-camp.md create mode 100644 packages/astro/test/fixtures/rewrite-issue-13633/astro.config.mjs create mode 100644 packages/astro/test/fixtures/rewrite-issue-13633/package.json create mode 100644 packages/astro/test/fixtures/rewrite-issue-13633/src/middleware.js create mode 100644 packages/astro/test/fixtures/rewrite-issue-13633/src/pages/about.astro create mode 100644 packages/astro/test/fixtures/rewrite-issue-13633/src/pages/index.astro diff --git a/.changeset/orange-cloths-camp.md b/.changeset/orange-cloths-camp.md new file mode 100644 index 000000000000..bb602309b156 --- /dev/null +++ b/.changeset/orange-cloths-camp.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes a regression where using `next('/')` didn't correctly return the requested route. diff --git a/packages/astro/src/core/routing/rewrite.ts b/packages/astro/src/core/routing/rewrite.ts index a8d7862f6f0e..2e92c6e12445 100644 --- a/packages/astro/src/core/routing/rewrite.ts +++ b/packages/astro/src/core/routing/rewrite.ts @@ -80,7 +80,7 @@ export function findRouteToRewrite({ } // Convert '/' to '' for trailingSlash: 'never' - if (pathname === '/' && !shouldAppendSlash) { + if (pathname === '/' && base !== '/' && !shouldAppendSlash) { pathname = ''; } diff --git a/packages/astro/test/fixtures/rewrite-issue-13633/astro.config.mjs b/packages/astro/test/fixtures/rewrite-issue-13633/astro.config.mjs new file mode 100644 index 000000000000..cb4250b192d4 --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-issue-13633/astro.config.mjs @@ -0,0 +1,8 @@ +import { defineConfig } from 'astro/config'; + +// https://astro.build/config +export default defineConfig({ + base: '', + trailingSlash: 'never', + output: 'server' +}); diff --git a/packages/astro/test/fixtures/rewrite-issue-13633/package.json b/packages/astro/test/fixtures/rewrite-issue-13633/package.json new file mode 100644 index 000000000000..58b8a21e221f --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-issue-13633/package.json @@ -0,0 +1,8 @@ +{ + "name": "@test/rewrite-issue13633", + "version": "0.0.0", + "private": true, + "dependencies": { + "astro": "workspace:*" + } +} diff --git a/packages/astro/test/fixtures/rewrite-issue-13633/src/middleware.js b/packages/astro/test/fixtures/rewrite-issue-13633/src/middleware.js new file mode 100644 index 000000000000..4b3de7f2847b --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-issue-13633/src/middleware.js @@ -0,0 +1,4 @@ +export const onRequest = async (ctx, next) => { + const response = await next('/'); + return response; +}; diff --git a/packages/astro/test/fixtures/rewrite-issue-13633/src/pages/about.astro b/packages/astro/test/fixtures/rewrite-issue-13633/src/pages/about.astro new file mode 100644 index 000000000000..17712c0f72fc --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-issue-13633/src/pages/about.astro @@ -0,0 +1,12 @@ +--- + +--- + + + + About page + + +

About page

+ + diff --git a/packages/astro/test/fixtures/rewrite-issue-13633/src/pages/index.astro b/packages/astro/test/fixtures/rewrite-issue-13633/src/pages/index.astro new file mode 100644 index 000000000000..336e7fcfaeda --- /dev/null +++ b/packages/astro/test/fixtures/rewrite-issue-13633/src/pages/index.astro @@ -0,0 +1,12 @@ +--- + +--- + + + + Index page + + +

Index page

+ + diff --git a/packages/astro/test/rewrite.test.js b/packages/astro/test/rewrite.test.js index 4bcc82b4a02a..e4c4cc069ad1 100644 --- a/packages/astro/test/rewrite.test.js +++ b/packages/astro/test/rewrite.test.js @@ -728,3 +728,28 @@ describe('Runtime error in SSR, custom 500', () => { assert.equal($('h1').text(), 'Expected http status of index page is 200'); }); }); + +describe('Issue 13633', async () => { + /** @type {import('./test-utils').Fixture} */ + let fixture; + let devServer; + before(async () => { + fixture = await loadFixture({ + root: './fixtures/rewrite-issue-13633/', + output: 'server', + adapter: testAdapter(), + }); + devServer = await fixture.startDevServer(); + }); + + after(async () => { + await devServer.stop(); + }); + + it('should correctly rewrite to be homepage', async () => { + const html = await fixture.fetch('/foo').then((res) => res.text()); + const $ = cheerioLoad(html); + + assert.equal($('h1').text(), 'Index page'); + }); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ff7f5c74de9..dfce61a9de00 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3648,6 +3648,12 @@ importers: specifier: workspace:* version: link:../../.. + packages/astro/test/fixtures/rewrite-issue-13633: + dependencies: + astro: + specifier: workspace:* + version: link:../../.. + packages/astro/test/fixtures/rewrite-runtime-error: dependencies: astro: