3. 기존 라우터 (Router + Dispatcher)
3.1 URI 취득과 정제
- 입력 우선순위:
$_GET['_url'](IIS 리라이트 없는 환경 폴백) → IISUNENCODED_URL→dx_request_uri()→ …. 쿼리스트링 제거, 서브디렉토리 베이스 경로(SCRIPT_NAME의 dirname) 제거. - 세그먼트는
/로 분리 후[a-zA-Z0-9\-_]외 문자를 전부 삭제하고, 빈 세그먼트는 버린다.- 즉
., 한글, 공백이 들어간 슬러그는 라우팅에 쓸 수 없다.a.b→ab. - 예외: 첫 세그먼트가
sitemap*.xml또는robots.txt이면 그대로 허용.
- 즉
3.2 매칭 규칙 (위에서 아래로, 먼저 맞는 것이 이긴다)
| 순서 | 조건 | type | 비고 |
|---|---|---|---|
| 1 | 세그먼트 없음 (/) |
home |
slug=home |
| 2 | 첫 세그먼트 search |
search |
action=list |
| 3 | 첫 세그먼트 admin |
admin |
action=두번째(없으면 dashboard), sub=세번째 |
| 4 | 첫 세그먼트 auth |
auth |
action=두번째(없으면 login) |
| 5 | sitemap*.xml |
api |
action=sitemap, $GLOBALS['dx_api_action']=파일명(.xml 제거) |
| 6 | robots.txt |
api |
action=robots |
| 7 | 첫 세그먼트 api |
api |
action=두번째, 세번째는 $_GET['endpoint']로 주입(이미 없을 때만) |
| 8 | 두번째 세그먼트 ∈ list view write edit delete search reply bulk 이고 board_key=첫 세그먼트인 게시판이 존재 |
board |
id=세번째가 숫자면 문자열 그대로, 아니면 '0' |
| 9 | 세그먼트가 하나이고 board_key와 일치 |
board |
action=list |
| 10 | 전체 경로(a/b/c)가 페이지 slug와 일치 → 아니면 첫 세그먼트가 slug와 일치 |
page |
|
| 11 | 그 외 | 404 |