From 35b7ac78d2cd0314746a7d94fbf3bf38b5d7999a Mon Sep 17 00:00:00 2001 From: mantrakp04 Date: Fri, 20 Mar 2026 15:08:13 -0700 Subject: [PATCH] Enhance middleware and route handling for LLMs ### Summary of Changes - Updated middleware to include additional redirects for `/skill.md` and `/skills.md` to `/llms.txt`. - Refactored redirect logic in LLM routes to use `NextResponse.redirect` for improved clarity and consistency. - Adjusted URL handling in `llms.txt` to ensure proper relative URL extraction for documentation and API pages. These changes improve the routing logic and ensure better handling of various URL formats. --- docs/src/app/llms.mdx/[[...slug]]/route.ts | 7 ++++--- docs/src/app/llms.txt/route.ts | 10 ++++++++-- docs/src/app/llms/[[...slug]]/route.ts | 3 +-- docs/src/middleware.ts | 6 +++++- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/docs/src/app/llms.mdx/[[...slug]]/route.ts b/docs/src/app/llms.mdx/[[...slug]]/route.ts index 4aa179d47..2d4f35086 100644 --- a/docs/src/app/llms.mdx/[[...slug]]/route.ts +++ b/docs/src/app/llms.mdx/[[...slug]]/route.ts @@ -1,4 +1,3 @@ -import { redirect } from 'next/navigation'; import { NextResponse, type NextRequest } from 'next/server'; import { getLLMText } from '../../../../lib/get-llm-text'; import { apiSource, source } from '../../../../lib/source'; @@ -6,7 +5,7 @@ import { apiSource, source } from '../../../../lib/source'; export const revalidate = false; export async function GET( - _req: NextRequest, + request: NextRequest, { params }: { params: Promise<{ slug?: string[] }> }, ) { const { slug } = await params; @@ -19,7 +18,9 @@ export async function GET( page = apiSource.getPage(slug); } - if (!page) redirect("/"); + if (!page) { + return NextResponse.redirect(new URL('/', request.url), 307); + } try { return new NextResponse(await getLLMText(page)); diff --git a/docs/src/app/llms.txt/route.ts b/docs/src/app/llms.txt/route.ts index 45130df6e..13d9a3ee1 100644 --- a/docs/src/app/llms.txt/route.ts +++ b/docs/src/app/llms.txt/route.ts @@ -9,11 +9,17 @@ export async function GET() { const apiUrls = new Set(); for (const page of source.getPages()) { - docsUrls.add(`/llms${page.url}`.slice('/llms/docs/'.length)); + const relativeUrl = page.url.replace(/^\/docs\/?/, ''); + if (relativeUrl !== '') { + docsUrls.add(relativeUrl); + } } for (const page of apiSource.getPages()) { - apiUrls.add(`/llms${page.url}`.slice('/llms/api/'.length)); + const relativeUrl = page.url.replace(/^\/api\/?/, ''); + if (relativeUrl !== '') { + apiUrls.add(relativeUrl); + } } const body = [ diff --git a/docs/src/app/llms/[[...slug]]/route.ts b/docs/src/app/llms/[[...slug]]/route.ts index 2c02cf345..0603c91b7 100644 --- a/docs/src/app/llms/[[...slug]]/route.ts +++ b/docs/src/app/llms/[[...slug]]/route.ts @@ -1,4 +1,3 @@ -import { redirect } from 'next/navigation'; import { NextResponse, type NextRequest } from 'next/server'; import { getLLMText } from '../../../../lib/get-llm-text'; import { apiSource, source } from '../../../../lib/source'; @@ -36,7 +35,7 @@ export async function GET( const page = resolvePage(slug); if (!page) { - redirect("/"); + return NextResponse.redirect(new URL('/', request.url), 307); } try { diff --git a/docs/src/middleware.ts b/docs/src/middleware.ts index 9d727db51..a8882ebd9 100644 --- a/docs/src/middleware.ts +++ b/docs/src/middleware.ts @@ -18,7 +18,9 @@ export default function middleware(request: NextRequest, event: NextFetchEvent) if ( pathname === '/SKILL.md' || - pathname === '/SKILLS.md' + pathname === '/SKILLS.md' || + pathname === '/skill.md' || + pathname === '/skills.md' ) { const url = request.nextUrl.clone(); url.pathname = '/llms.txt'; @@ -81,6 +83,8 @@ export const config = { matcher: [ '/SKILL.md', '/SKILLS.md', + '/skill.md', + '/skills.md', '/docs/:path*', '/api/:path*', ],