Skip to content
This repository was archived by the owner on Feb 10, 2025. It is now read-only.

Commit 1b18e67

Browse files
authored
fix(netlify): support middleware rewrite (#413)
* fix(netlify): support middleware rewrite * Changeset
1 parent dd6a7c9 commit 1b18e67

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

.changeset/fast-penguins-build.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@astrojs/netlify': patch
3+
---
4+
5+
Fixes `context.rewrite` in edge middleware

packages/netlify/src/index.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,25 @@ export default function netlifyIntegration(
294294
params: {}
295295
});
296296
ctx.locals = { netlify: { context } }
297+
// https://docs.netlify.com/edge-functions/api/#return-a-rewrite
298+
ctx.rewrite = (target) => {
299+
if(target instanceof Request) {
300+
// We can only mutate headers, so if anything else is different, we need to fetch
301+
// the target URL instead.
302+
if(target.method !== request.method || target.body || target.url.origin !== request.url.origin) {
303+
return fetch(target);
304+
}
305+
// We can't replace the headers object, so we need to delete all headers and set them again
306+
request.headers.forEach((_value, key) => {
307+
request.headers.delete(key);
308+
});
309+
target.headers.forEach((value, key) => {
310+
request.headers.set(key, value);
311+
});
312+
return new URL(target.url);
313+
}
314+
return new URL(target, request.url);
315+
};
297316
const next = () => {
298317
const { netlify, ...otherLocals } = ctx.locals;
299318
request.headers.set("x-astro-locals", trySerializeLocals(otherLocals));

0 commit comments

Comments
 (0)