diff --git a/.env.sample b/.env.sample
index b914814..4ac308f 100644
--- a/.env.sample
+++ b/.env.sample
@@ -14,3 +14,7 @@ OIDC_CLIENT_SECRET=
OIDC_REDIRECT_URL=
OIDC_SCOPES=openid profile email
IDP_SERVICE_URL=
+
+# 정적 자산 CDN (선택)
+# 예: STATIC_CDN_BASE_URL=https://cdn.example.com/kngil
+STATIC_CDN_BASE_URL=
diff --git a/.htaccess b/.htaccess
index 4dd0cbc..53f06b2 100644
--- a/.htaccess
+++ b/.htaccess
@@ -1,19 +1,45 @@
RewriteEngine On
+# /adm -> /admin (관리자 루프 방지)
+RewriteRule ^adm/?$ /admin [R=301,L]
+
+# 대소문자 혼용 경로 보정
+RewriteRule ^(kngil/)?js/lib/ScrollToPlugin\.min\.js$ /js/lib/scrollToPlugin.min.js [R=301,L]
+
+# 레거시 /kngil/skin/adm*.php -> /admin(/company)
+RewriteCond %{THE_REQUEST} \s/+kngil/skin/adm_comp\.php [NC]
+RewriteRule ^kngil/skin/adm_comp\.php$ /admin/company [R=301,L]
+RewriteCond %{THE_REQUEST} \s/+kngil/skin/adm\.php [NC]
+RewriteRule ^kngil/skin/adm\.php$ /admin [R=301,L]
+
+# 레거시 /kngil/skin/index.php -> /
+RewriteCond %{THE_REQUEST} \s/+kngil/skin/index\.php [NC]
+RewriteRule ^kngil/skin/index\.php$ / [R=301,L]
+
# 레거시 /kngil/skin/*.php -> /* (확장자 제거)
+RewriteCond %{THE_REQUEST} \s/+kngil/skin/([^\s]+)\.php [NC]
RewriteRule ^kngil/skin/([^/]+)\.php$ /$1 [R=301,L]
# 레거시 /kngil/*.php -> /* (확장자 제거)
+RewriteCond %{THE_REQUEST} \s/+kngil/([^\s]+)\.php [NC]
RewriteRule ^kngil/([^/]+)\.php$ /$1 [R=301,L]
# 레거시 /kngil 또는 /kngil/ -> /
+RewriteCond %{THE_REQUEST} \s/+kngil/?\s [NC]
RewriteRule ^kngil/?$ / [R=301,L]
+# 정적 파일 CDN 리다이렉트(옵션: STATIC_CDN_BASE_URL 환경변수)
+RewriteCond %{ENV:STATIC_CDN_BASE_URL} !=""
+RewriteRule ^(kngil/)?(js|css|img|fonts|download|uploads|vendor)/(.*)$ %{ENV:STATIC_CDN_BASE_URL}/$2/$3 [R=302,L]
+
# 기존 파일/디렉터리는 그대로 통과
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
+# 정적 파일 루트 경로 -> /kngil/ 경로로 내부 라우팅
+RewriteRule ^(js|css|img|fonts|download|uploads|vendor)/(.*)$ /kngil/$1/$2 [L]
+
# Admin UI
RewriteRule ^admin/?$ /kngil/skin/adm.php [L]
RewriteRule ^admin/company/?$ /kngil/skin/adm_comp.php [L]
diff --git a/README.md b/README.md
index 23b4325..d7d50b8 100644
--- a/README.md
+++ b/README.md
@@ -31,6 +31,17 @@ docker compose down
- `OIDC_SCOPES` (예: `openid profile email`)
- `IDP_SERVICE_URL` (예: `https://idp.example.com`)
+### 정적 자산 CDN (선택)
+정적 파일(`/js`, `/css`, `/img`, `/fonts`, `/download`, `/uploads`, `/vendor`)을 CDN으로 리다이렉트하려면
+웹 서버 환경변수 `STATIC_CDN_BASE_URL`을 설정하세요. (값이 있으면 302 리다이렉트)
+
+예시:
+```bash
+STATIC_CDN_BASE_URL=https://cdn.example.com/kngil
+```
+
+> 참고: 이 변수는 Apache의 Rewrite 환경변수로 사용됩니다. Docker Compose를 사용한다면 web 서비스의 환경변수로 전달해도 됩니다.
+
## DB 초기화
- `kngil_DB` 덤프는 **처음 실행 시** 자동으로 로드됩니다.
- 이미 생성된 볼륨이 있으면 재적용되지 않습니다. 다시 초기화하려면 아래를 실행하세요.
diff --git a/kngil/img/favicon.svg b/kngil/img/favicon.svg
new file mode 100644
index 0000000..7480a13
--- /dev/null
+++ b/kngil/img/favicon.svg
@@ -0,0 +1,25 @@
+
+
\ No newline at end of file
diff --git a/kngil/skin/_head.php b/kngil/skin/_head.php
index 96572bb..24e822f 100644
--- a/kngil/skin/_head.php
+++ b/kngil/skin/_head.php
@@ -9,23 +9,23 @@
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/kngil/skin/_head_pop_temp.php b/kngil/skin/_head_pop_temp.php
index 471be07..8ffb47b 100644
--- a/kngil/skin/_head_pop_temp.php
+++ b/kngil/skin/_head_pop_temp.php
@@ -8,9 +8,9 @@
-
-
+
+
-
+