52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import { NextResponse } from 'next/server'
|
|
import type { NextRequest } from 'next/server'
|
|
|
|
export function middleware(request: NextRequest) {
|
|
const host = request.headers.get('host') || ''
|
|
const pathname = request.nextUrl.pathname
|
|
|
|
// Handle zine.mycofi.earth subdomain
|
|
if (host.startsWith('zine.')) {
|
|
// Don't rewrite if already accessing /zine paths or API/static files
|
|
if (
|
|
pathname.startsWith('/zine') ||
|
|
pathname.startsWith('/api/zine') ||
|
|
pathname.startsWith('/_next') ||
|
|
pathname.startsWith('/favicon') ||
|
|
pathname.includes('.')
|
|
) {
|
|
return NextResponse.next()
|
|
}
|
|
|
|
// Rewrite root and other paths to /zine
|
|
const url = request.nextUrl.clone()
|
|
|
|
if (pathname === '/') {
|
|
url.pathname = '/zine'
|
|
} else if (pathname.startsWith('/create')) {
|
|
url.pathname = `/zine${pathname}`
|
|
} else if (pathname.startsWith('/z/')) {
|
|
url.pathname = `/zine${pathname}`
|
|
} else {
|
|
// For any other path, try prepending /zine
|
|
url.pathname = `/zine${pathname}`
|
|
}
|
|
|
|
return NextResponse.rewrite(url)
|
|
}
|
|
|
|
return NextResponse.next()
|
|
}
|
|
|
|
export const config = {
|
|
matcher: [
|
|
/*
|
|
* Match all request paths except:
|
|
* - _next/static (static files)
|
|
* - _next/image (image optimization files)
|
|
* - favicon.ico (favicon file)
|
|
*/
|
|
'/((?!_next/static|_next/image|favicon.ico).*)',
|
|
],
|
|
}
|