diff --git a/src/presets/netlify.ts b/src/presets/netlify.ts index 0ef35d76e7..2b335bb115 100644 --- a/src/presets/netlify.ts +++ b/src/presets/netlify.ts @@ -85,7 +85,7 @@ async function writeRedirects(nitro: Nitro) { let contents = "/* /.netlify/functions/server 200"; const rules = Object.entries(nitro.options.routeRules) - .sort((a, b) => a[0].split("/").length - b[0].split("/").length) + .sort((a, b) => a[0].split(/\/(?!\*)/).length - b[0].split(/\/(?!\*)/).length) // Rewrite static cached paths to builder functions for (const [key] of rules.filter( @@ -127,7 +127,7 @@ async function writeHeaders(nitro: Nitro) { let contents = ""; const rules = Object.entries(nitro.options.routeRules) - .sort((a, b) => b[0].split("/").length - a[0].split("/").length) + .sort((a, b) => b[0].split(/\/(?!\*)/).length - a[0].split(/\/(?!\*)/).length) for (const [path, routeRules] of rules.filter(([_, routeRules]) => routeRules.headers)) { const headers = [ diff --git a/src/presets/vercel.ts b/src/presets/vercel.ts index e06eb88946..297932c862 100644 --- a/src/presets/vercel.ts +++ b/src/presets/vercel.ts @@ -121,7 +121,7 @@ export const vercelEdge = defineNitroPreset({ function generateBuildConfig(nitro: Nitro) { const rules = Object.entries(nitro.options.routeRules) - .sort((a, b) => b[0].split("/").length - a[0].split("/").length) + .sort((a, b) => b[0].split(/\/(?!\*)/).length - a[0].split(/\/(?!\*)/).length) return defu(nitro.options.vercel?.config, { version: 3, diff --git a/test/presets/netlify.test.ts b/test/presets/netlify.test.ts index ec2fc91acb..c8844042a5 100644 --- a/test/presets/netlify.test.ts +++ b/test/presets/netlify.test.ts @@ -41,8 +41,8 @@ describe("nitro:preset:netlify", async () => { /* eslint-disable no-tabs */ expect(redirects).toMatchInlineSnapshot(` "/rules/nested/override /other 302 - /rules/nested/* /base 302 /rules/redirect/obj https://nitro.unjs.io/ 301 + /rules/nested/* /base 302 /rules/redirect /base 302 /rules/swr-ttl/* /.netlify/builders/server 200 /rules/swr/* /.netlify/builders/server 200 @@ -58,15 +58,15 @@ describe("nitro:preset:netlify", async () => { ); /* eslint-disable no-tabs */ expect(headers).toMatchInlineSnapshot(` - "/rules/nested/* - x-test: test - /rules/headers + "/rules/headers cache-control: s-maxage=60 /rules/cors access-control-allow-origin: * access-control-allowed-methods: GET access-control-allow-headers: * access-control-max-age: 0 + /rules/nested/* + x-test: test " `); /* eslint-enable no-tabs */ diff --git a/test/presets/vercel.test.ts b/test/presets/vercel.test.ts index 9fc4d9cf19..84a287a598 100644 --- a/test/presets/vercel.test.ts +++ b/test/presets/vercel.test.ts @@ -50,14 +50,6 @@ describe("nitro:preset:vercel", async () => { "src": "/rules/redirect/obj", "status": 308, }, - { - "headers": { - "Location": "/base", - "x-test": "test", - }, - "src": "/rules/nested/.*", - "status": 307, - }, { "headers": { "Location": "/other", @@ -87,6 +79,14 @@ describe("nitro:preset:vercel", async () => { "src": "/rules/redirect", "status": 307, }, + { + "headers": { + "Location": "/base", + "x-test": "test", + }, + "src": "/rules/nested/.*", + "status": 307, + }, { "continue": true, "headers": {