middleware.tsx
unknown
typescript
10 months ago
2.5 kB
6
Indexable
import { NextRequest, NextResponse } from "next/server"; import { getToken } from "next-auth/jwt"; export const config = { matcher: [ /* * Match all paths except for: * 1. /api routes * 2. /_next (Next.js internals) * 3. /_static (inside /public) * 4. all root files inside /public (e.g. /favicon.ico) */ "/((?!api/|_next/|_static/|_public/|_vercel|[\\w-]+\\.\\w+|images/|videos/).*)", ], }; export default async function middleware(req: NextRequest) { const url = req.nextUrl; // Get hostname of request (e.g. demo.vercel.pub, demo.localhost:3000) let hostname = req.headers .get("host")! .replace(".localhost:3000", `.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`); // special case for Vercel preview deployment URLs if ( hostname.includes("---") && hostname.endsWith(`.${process.env.NEXT_PUBLIC_VERCEL_DEPLOYMENT_SUFFIX}`) ) { hostname = `${hostname.split("---")[0]}.${ process.env.NEXT_PUBLIC_ROOT_DOMAIN }`; } const searchParams = req.nextUrl.searchParams.toString(); // Get the pathname of the request (e.g. /, /about, /blog/first-post) const path = `${url.pathname}${ searchParams.length > 0 ? `?${searchParams}` : "" }`; // rewrites for app pages if ( hostname == `app.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}` || hostname == `app.dev.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}` || hostname == "localhost:8888" ) { const session = await getToken({ req, }); if (!session && path !== "/login") { console.log("Need to redirect to /login", hostname); return NextResponse.redirect(new URL("/login", req.url)); } else if (session && path == "/login") { console.log("Need to redirect to /home", hostname); return NextResponse.redirect(new URL("/", req.url)); } console.log("Need to rewrite app to /app folder", hostname); return NextResponse.rewrite( new URL(`/app${path === "/" ? "" : path}`, req.url), ); } console.log("Need to rewrite root application to home folder", hostname); // rewrite root application to `/home` folder if ( hostname === "localhost:3000" || hostname === process.env.NEXT_PUBLIC_ROOT_DOMAIN ) { return NextResponse.rewrite( new URL(`/home${path === "/" ? "" : path}`, req.url), ); } console.log("Need to rewrite to /[domain]/[slug]", hostname); // rewrite everything else to `/[domain]/[slug] dynamic route return NextResponse.rewrite(new URL(`/${hostname}${path}`, req.url)); }
Editor is loading...
Leave a Comment