Editor-defined redirects

How it works
The redirect schema
Redirects are set-up in Sanity Studio, in the Global Settings singleton (refer to app/sanity/schemas/documents/settings.ts)
Its destination is a regular link, like any other in the toolkit, and is resolved with getLinkProps (from app/routing/urls.ts).
Query Sanity for the redirect target in the loader
app/routing/routeLoader.ts parses redirects and acts on them:
app/routing/routeLoader.ts#getDocForRoute
// Simplified for clarity
const { redirectTarget } = await client.fetch(
/* groq */ `{
"redirectTarget": *[_id == $settingsId][0].redirects[source in $routePaths][0]{
source,
destination {
${LINK_FRAGMENT}
},
permanent,
}
}`,
{
routePaths: getPathVariations(routePath),
settingsId: COMMON_IDS.settings,
},
)
const redirect = redirectTarget?.destination
? {
to: getLinkProps(target.destination)?.href,
permanent: target.permanent,
}
: undefinedIf a target exists, redirect users to it
We use Remix's own redirect method:
app/routing/routeLoader.ts
if (redirectRoute?.to) {
return redirect(redirectRoute.to, {
status: Boolean(redirectRoute.permanent) ? 308 : 307,
})
}