summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Bjorn Lu <bjornlu.dev@gmail.com> 2023-06-22 23:40:08 +0800
committerGravatar GitHub <noreply@github.com> 2023-06-22 23:40:08 +0800
commit32bde967f4b21648b1e11dbfa7964bf7f348f7b9 (patch)
treeb9ef3431afaed9338b0357369a44392baf6576dc
parent38b104049a4d3f25ff01baeecf3698515ab9a07b (diff)
downloadastro-32bde967f4b21648b1e11dbfa7964bf7f348f7b9.tar.gz
astro-32bde967f4b21648b1e11dbfa7964bf7f348f7b9.tar.zst
astro-32bde967f4b21648b1e11dbfa7964bf7f348f7b9.zip
Fix vercel redirects with trailingSlash always (#7447)
-rw-r--r--.changeset/nervous-paws-knock.md5
-rw-r--r--packages/integrations/vercel/src/lib/redirects.ts2
-rw-r--r--packages/integrations/vercel/test/fixtures/redirects/src/pages/subpage.astro0
-rw-r--r--packages/integrations/vercel/test/redirects.test.js15
4 files changed, 20 insertions, 2 deletions
diff --git a/.changeset/nervous-paws-knock.md b/.changeset/nervous-paws-knock.md
new file mode 100644
index 000000000..4051bd8c2
--- /dev/null
+++ b/.changeset/nervous-paws-knock.md
@@ -0,0 +1,5 @@
+---
+'@astrojs/vercel': patch
+---
+
+Fix redirects for root page when using `trailingSlash: "always"`
diff --git a/packages/integrations/vercel/src/lib/redirects.ts b/packages/integrations/vercel/src/lib/redirects.ts
index 5c6bb605b..8613be2ed 100644
--- a/packages/integrations/vercel/src/lib/redirects.ts
+++ b/packages/integrations/vercel/src/lib/redirects.ts
@@ -87,7 +87,7 @@ export function getRedirects(routes: RouteData[], config: AstroConfig): VercelRo
headers: { Location: getRedirectLocation(route, config) },
status: getRedirectStatus(route),
});
- } else if (route.type === 'page') {
+ } else if (route.type === 'page' && route.route !== '/') {
if (config.trailingSlash === 'always') {
redirects.push({
src: config.base + getMatchPattern(route.segments),
diff --git a/packages/integrations/vercel/test/fixtures/redirects/src/pages/subpage.astro b/packages/integrations/vercel/test/fixtures/redirects/src/pages/subpage.astro
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/packages/integrations/vercel/test/fixtures/redirects/src/pages/subpage.astro
diff --git a/packages/integrations/vercel/test/redirects.test.js b/packages/integrations/vercel/test/redirects.test.js
index 16d845b04..35bbfcd51 100644
--- a/packages/integrations/vercel/test/redirects.test.js
+++ b/packages/integrations/vercel/test/redirects.test.js
@@ -1,5 +1,4 @@
import { expect } from 'chai';
-import * as cheerio from 'cheerio';
import { loadFixture } from './test-utils.js';
describe('Redirects', () => {
@@ -18,6 +17,7 @@ describe('Redirects', () => {
},
'/blog/[...slug]': '/team/articles/[...slug]',
},
+ trailingSlash: 'always',
experimental: {
redirects: true,
},
@@ -56,4 +56,17 @@ describe('Redirects', () => {
expect(blogRoute.headers.Location.startsWith('/team/articles')).to.equal(true);
expect(blogRoute.status).to.equal(301);
});
+
+ it('define trailingSlash redirect for sub pages', async () => {
+ const config = await getConfig();
+
+ const subpathRoute = config.routes.find((r) => r.src === '/\\/subpage');
+ expect(subpathRoute).to.not.be.undefined;
+ expect(subpathRoute.headers.Location).to.equal('/subpage/');
+ });
+
+ it('does not define trailingSlash redirect for root page', async () => {
+ const config = await getConfig();
+ expect(config.routes.find((r) => r.src === '/')).to.be.undefined;
+ });
});