nextjs middleware rewrite를 통해 서브 도메인 적용하기
rewrite 기능을 사용하여 간단하게 사용자별 서브 도메인을 생성하는 방법
예를 들어 아래와 같이 path에 사용자 이름을 사용하지 않고 메인 도메인 앞에 사용자 이름이 붙는 형식이다
(티스토리가 사용자별 서브 도메인을 사용하고 있다)
localhost:3000/blog/[username] -> [username].localhost:3000
프로젝트 디렉토리 구조
미들웨어 적용하기
프로젝트 루트 경로(approuter에서 app 폴더와 같은 위치)에 "middleware.ts"을 생성
config는 페이지 요청 이외의 다른 요청에 대해서는 middleware를 적용하지 않도록 지정
// /middleware.ts
import { NextRequest, NextResponse } from 'next/server'
export const middleware = (req: NextRequest) => {
const host = req.headers.get('host')!
//서브 도메인이 없는 경우
if (
host === 'localhost:3000' ||
host === process.env.NEXT_PUBLIC_ROOT_DOMAIN
) {
return NextResponse.next()
}
//서브 도메인이 있는 경우
const subdomain = host.replace('.localhost:3000', '')
const searchParams = req.nextUrl.searchParams.toString()
const path = `${req.nextUrl.pathname}${
searchParams.length > 0 ? `?${searchParams}` : ''
}`
const nextURL = new URL(`/blog/${subdomain}${path}`, req.url)
return NextResponse.rewrite(nextURL)
}
export const config = {
matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
}
서브도메인 적용 후
'JAVASCRIPT' 카테고리의 다른 글
Firebase에서의 on the fly 방식 썸네일 이미지 최적화(Hosting, Cloud functions) (0) | 2024.01.24 |
---|---|
nextjs tailwind pagination 컴포넌트 (usePagination) (0) | 2023.12.26 |
항해 플러스 코육대 1회 총알 피하기가 아니라 추석 음식 피하기! 회고 (1) | 2023.10.03 |
최종 프로젝트 종료와 코드 리뷰 회고 (0) | 2023.09.19 |
브이월드 2D데이터 api react nextjs 사용법 (0) | 2023.05.04 |