Redirects

Handling redirects from the Redirect module.


This guide uses translatedPathFromContext which is available in next-drupal ^1.1.0.


Next.js

To use redirects in Next.js you can configure a redirects key in next.config.js.

next.config.js

module.exports = {
async redirects() {
return [
{
source: "/about",
destination: "/",
permanent: true,
},
]
},
}

Redirect Module

To handle redirects coming from Drupal (redirect module), you can use translatedPathFromContext.

Here's how you can handle redirect in getStaticProps.

pages/[...slug].tsx

import { DrupalNode } from "next-drupal"
export async function getStaticProps(
context
): Promise<GetStaticPropsResult<NodePageProps>> {
// Get information about the path.
const path = await drupal.translatePathFromContext(context)
if (!path) {
return {
notFound: true,
}
}
// Check for redirect.
if (path.redirect?.length) {
const [redirect] = path.redirect
return {
redirect: {
destination: redirect.to,
permanent: redirect.status === "301",
},
}
}
// No redirect. Fetch the resource for this type.
const resource = await drupal.getResourceFromContext<DrupalNode>(
path,
context
)
}

With fallback: "blocking" in getStaticPaths, this will cache and handle redirects configured in Drupal and still work with incremental static regeneration.

In multilingual setup you may need to specify pathPrefix option for translatePathFromContext for default locale. In some cases Drupal can't find a matching redirect for path without explicit locale prefix.

// Get information about the path.
const path = await drupal.translatePathFromContext(context, {
pathPrefix: context.locale === context.defaultLocale ? context.locale : "/",
})