mirror of
https://github.com/withastro/astro.git
synced 2025-01-06 22:10:10 -05:00
47877a7540
* feat: implement reroute in dev (#10818) * chore: implement reroute in dev * chore: revert naming change * chore: conditionally create the new request * chore: handle error * remove only * remove only * chore: add tests and remove logs * chore: fix regression * chore: fix regression route matching * chore: remove unwanted test * feat: reroute in SSG (#10843) * feat: rerouting in ssg * linting * feat: reroute for SSR (#10845) * feat: implement reroute in dev (#10818) * chore: implement reroute in dev * chore: revert naming change * chore: conditionally create the new request * chore: handle error * remove only * remove only * chore: add tests and remove logs * chore: fix regression * chore: fix regression route matching * chore: remove unwanted test * feat: reroute in SSG (#10843) * feat: rerouting in ssg * linting * feat: rerouting in ssg * linting * feat: reroute for SSR * fix rebase * fix merge issue * feat: rerouting in the middleware (#10853) * feat: implement reroute in dev (#10818) * chore: implement reroute in dev * chore: revert naming change * chore: conditionally create the new request * chore: handle error * remove only * remove only * chore: add tests and remove logs * chore: fix regression * chore: fix regression route matching * chore: remove unwanted test * feat: reroute in SSG (#10843) * feat: rerouting in ssg * linting * feat: rerouting in ssg * linting * feat: reroute for SSR * fix rebase * fix merge issue * feat: implement the `next(payload)` feature for rerouting * chore: revert code * chore: fix code * Apply suggestions from code review Co-authored-by: Bjorn Lu <bjornlu.dev@gmail.com> --------- Co-authored-by: Bjorn Lu <bjornlu.dev@gmail.com> * feat: rerouting * chore: rename to `rewrite` * chore: better error message * chore: update the chageset * Apply suggestions from code review Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> * chore: update docs based on feedback * lock file * Apply suggestions from code review Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> Co-authored-by: Matthew Phillips <matthew@skypack.dev> Co-authored-by: Ben Holmes <hey@bholmes.dev> * feedback * rename * add tests for 404 * revert change * fix regression * Update .changeset/pink-ligers-share.md Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> --------- Co-authored-by: Bjorn Lu <bjornlu.dev@gmail.com> Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> Co-authored-by: Matthew Phillips <matthew@skypack.dev> Co-authored-by: Ben Holmes <hey@bholmes.dev>
49 lines
1.2 KiB
Markdown
49 lines
1.2 KiB
Markdown
---
|
|
"astro": minor
|
|
---
|
|
|
|
Adds experimental rewriting in Astro with a new `rewrite()` function and the middleware `next()` function.
|
|
|
|
The feature is available via an experimental flag in `astro.config.mjs`:
|
|
|
|
```js
|
|
export default defineConfig({
|
|
experimental: {
|
|
rewriting: true
|
|
}
|
|
})
|
|
```
|
|
|
|
When enabled, you can use `rewrite()` to **render** another page without changing the URL of the browser in Astro pages and endpoints.
|
|
|
|
```astro
|
|
---
|
|
// src/pages/dashboard.astro
|
|
if (!Astro.props.allowed) {
|
|
return Astro.rewrite("/")
|
|
}
|
|
---
|
|
```
|
|
|
|
```js
|
|
// src/pages/api.js
|
|
export function GET(ctx) {
|
|
if (!ctx.locals.allowed) {
|
|
return ctx.rewrite("/")
|
|
}
|
|
}
|
|
```
|
|
|
|
The middleware `next()` function now accepts a parameter with the same type as the `rewrite()` function. For example, with `next("/")`, you can call the next middleware function with a new `Request`.
|
|
|
|
```js
|
|
// src/middleware.js
|
|
export function onRequest(ctx, next) {
|
|
if (!ctx.cookies.get("allowed")) {
|
|
return next("/") // new signature
|
|
}
|
|
return next();
|
|
}
|
|
```
|
|
|
|
> **NOTE**: please [read the RFC](https://github.com/withastro/roadmap/blob/feat/reroute/proposals/0047-rerouting.md) to understand the current expectations of the new APIs.
|