SPA 새로고침 404 진단 및 해결
1. 증상
섹션 제목: “1. 증상”- wikipinksky.kr에서 한글 경로 열람은 처음에 정상
- 같은 페이지(또는 다른 페이지)를 다시 열거나 새로고침하면 404
- 루트(
/) 접속은 정상, 즉 Quartz 서버 자체는 떠 있음
2. 원인 — slug 불일치
섹션 제목: “2. 원인 — slug 불일치”| 항목 | 실제값 |
|---|---|
| 옵시디언 폴더명 | 01_PROJECTS(프로젝트) |
| Quartz 빌드 slug | 01_PROJECTS (괄호+한글 제거됨) |
| 브라우저가 요청하는 URL | /01_PROJECTS(%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8)/... |
| 서버의 실제 파일 경로 | public/01_PROJECTS/... |
→ 파일 시스템 상 01_PROJECTS(프로젝트) 폴더가 없어 Caddy/file_server 가 404 반환
3. 시도한 방법 (실패)
섹션 제목: “3. 시도한 방법 (실패)”3-1. Caddy path_regexp + redirect
섹션 제목: “3-1. Caddy path_regexp + redirect”@parens path_regexp parens ^(.+?)\([^)]+\)(.*)$redir @parens {re.parens.1}{re.parens.2} permanent- 결과: Location 헤더 빈 값, 정규식 미적용 (Caddy 파일 서버가 우선 동작)
- 원인:
try_files/file_server가 rewrite/redirect보다 우선 처리되거나 regex 매치 실패
3-2. Caddy try_files SPA fallback
섹션 제목: “3-2. Caddy try_files SPA fallback”try_files {path} {path}/index.html /index.htmlfile_server- 결과: 루트는 정상, 한글 경로는 계속 404
- 원인:
{path}가 이미 괄호 포함 URL → 실제 폴더와 매칭 실패
3-3. PM2 서버 포트 리버스 프록시
섹션 제목: “3-3. PM2 서버 포트 리버스 프록시”reverse_proxy 127.0.0.1:8080- 결과: 동일 404
- 원인: Quartz serve-handler 자체에 SPA fallback 로직이 없음
4. 최종 해결 — Symlink
섹션 제목: “4. 최종 해결 — Symlink”public/ 에 괄호 포함 이름을 실제 slug로 연결:
ln -sf 01_PROJECTS "01_PROJECTS(프로젝트)"ln -sf 02_AREAS "02_AREAS(영역)"ln -sf 03_RESOURCES "03_RESOURCES(자료)"→ 파일 시스템 레벨에서 URL 경로와 일치하도록 매핑
5. 확인 결과
섹션 제목: “5. 확인 결과”curl -I "https://wiki.pinksky.kr/01_PROJECTS(%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8)/"# HTTP/2 200 ✓
curl -I "https://wiki.pinksky.kr/01_PROJECTS(%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8)/A_mini-happy/"# HTTP/2 200 ✓[!note] 수정이력 2026-05-05 07:45, 루키 (hermes) — 최초 작성