aliases가 현재 URL과 동일할 때 리디렉션 루프 방지
변경 요약
- Frontmatter
aliases에 현재 문서와 동일한 경로가 포함되었을 때, 별도의 리디렉션 파일을 생성하지 않도록 건너뛰어 무한 리디렉션을 예방.
변경된 파일
quartz/plugins/emitters/aliases.ts
주요 구현 포인트
- 각 alias 대상에 대해
simplifySlug(aliasTargetSlug) === ogSlug인 경우continue로 스킵. - 상대 경로 alias는 현재 슬러그 기준으로 정규화 후 비교(
path.join(ogSlug, '..', alias)→simplifySlug). - 유효한 alias에 대해서만
resolveRelative(aliasTargetSlug, ogSlug)를 사용해 정적 리디렉션 HTML을 생성.
실제 변경된 코드 (diff)
diff --git a/quartz/plugins/emitters/aliases.ts b/quartz/plugins/emitters/aliases.ts
@@ async function* processFile(ctx: BuildCtx, file: VFile) {
const ogSlug = simplifySlug(file.data.slug!)
for (const aliasTarget of file.data.aliases ?? []) {
const aliasTargetSlug = (
isRelativeURL(aliasTarget)
? path.normalize(path.join(ogSlug, "..", aliasTarget))
: aliasTarget
) as FullSlug
+ // 동일 슬러그로 해석되는 alias는 리다이렉션 생성 스킵
+ if (simplifySlug(aliasTargetSlug) === ogSlug) {
+ continue
+ }
+
const redirUrl = resolveRelative(aliasTargetSlug, ogSlug)
yield write({
ctx,
content: `
<!DOCTYPE html>참고로, 직전 변경에서 상대 경로 alias를 현재 페이지 기준으로 해석하도록 보완했습니다.
// (이전 보완) 상대 경로 alias 정규화
const aliasTargetSlug = (
isRelativeURL(aliasTarget)
? path.normalize(path.join(ogSlug, "..", aliasTarget))
: aliasTarget
) as FullSlug왜 변경했는가
- 템플레이터/수동 편집으로 동일 경로 alias가 주입되는 경우가 있어, 빌드 산출물에서 자기 자신으로의 리디렉션이 생성 → 무한 루프 유발.
- 동일 슬러그 감지 시 생성을 건너뛰어 안전성 확보.
운영 체크리스트
- Vault 측 alias 생성 스크립트는 중복 경로를 최대한 피하도록 유지.
- 배포 전
npx quartz build -o public && git status public로 예상치 못한 대량 리디렉션 생성 여부를 점검.
커밋/PR 메타
- 로컬 커밋(사이트 레포):
f955e38— fix(aliases): skip redirects to same slug- 파일:
quartz/plugins/emitters/aliases.ts - 요약: 동일 슬러그 alias 감지 시 리다이렉션 생성을 건너뛰도록 가드 추가
- 파일:
- 업스트림 PR(Quartz v4): fix: skip self-referential redirects
- PR: https://github.com/jackyzha0/quartz/pull/2129
- 브랜치:
idencosmos:fix-alias-infinite-loop→jackyzha0:v4 - 상태: Open (2025-09-16 생성)
재현/검증 방법
- 재현용 frontmatter 예시
---
title: Example
permalink: /guide/example
aliases:
- /guide/example # 동일 경로 alias (self-referential)
---- 기대 동작
- 이전:
/guide/example.html에 대해 자기 자신으로의 리디렉션 페이지가 생성되어 루프 유발 가능 - 이후: 동일 슬러그로 해석되는 alias는 스킵되어 리디렉션 산출물이 생성되지 않음
- 이전:
- 로컬 확인 절차
npx quartz build --serve로 미리보기에서 해당 경로 접근 시 정상 렌더링(리디렉션 없음)npx quartz build -o public && rg "<meta http-equiv=\"refresh\"" public/guide -n에서 관련 리디렉션 파일이 없는지 점검
여담/설계 노트
- 비교는
simplifySlug()를 통해 정규화된 슬러그 기준으로 수행하므로,/a,/a/,/a/index등 동등 경로 변형도 안전하게 처리됩니다. - 상대 경로 alias (
../foo,./bar)는 현재 파일의ogSlug기준으로 정규화 후 비교합니다. - 추후
frontmatter에서permalink를 자동 alias에 포함시키는 로직과의 상호작용도 동일 가드로 보호됩니다.

