# DXCMS IIS 환경 설정 가이드
---## 포함 파일 구성
| 파일 | 역할 ||---|---|
| `web.config` | IIS URL 라우팅 및 보안 규칙 (URL Rewrite 모듈 필요) |
| `web.config.no-rewrite` | URL Rewrite 모듈 없는 환경용 대체 설정 |
| `fix_permissions.bat` | IIS 폴더 권한 자동 설정 스크립트 |
---
## 1. 빠른 시작
### 순서
```1. fix_permissions.bat → 관리자로 실행
2. web.config → 루트에 배치
3. IIS 재시작 → iisreset /restart
```
---
## 2. fix_permissions.bat
IIS에서 PHP가 파일을 읽고 쓰려면 `IIS_IUSRS` 계정에 해당 폴더 권한이 있어야 합니다. 이 스크립트가 자동으로 처리합니다.
### 실행 방법
파일을 **우클릭 → 관리자로 실행** 합니다. 일반 더블클릭으로는 권한 부족으로 실패합니다.
### 처리 내용
아래 폴더를 자동 생성하고 `IIS_IUSRS`, `IUSR` 계정에 수정(M) 권한을 부여합니다.```
data\sessions ← PHP 세션 파일 저장
data\uploads ← 이미지 등 업로드 파일
data\cache ← CMS 캐시 파일
data\logs ← 에러 및 접근 로그
```
### 주의사항
- 반드시 CMS 루트 폴더에 bat 파일을 두고 실행해야 경로가 올바르게 잡힙니다.- 실행 후 `iisreset /restart` 명령으로 IIS를 재시작하세요.
---
## 3. web.config
CMS의 핵심 라우팅 설정 파일입니다. Apache의 `.htaccess`와 동일한 역할을 합니다.
### URL Rewrite 모듈 필요
이 파일은 **IIS URL Rewrite 2.x 모듈**이 설치되어 있어야 합니다.> 다운로드: https://www.iis.net/downloads/microsoft/url-rewrite
모듈이 없는데 이 파일을 그대로 두면 **HTTP 500.19 에러**가 발생합니다. 이 경우 아래 `web.config.no-rewrite` 를 사용하세요.
### 라우팅 규칙 설명
규칙은 위에서 아래 순서로 적용됩니다. 먼저 매칭된 규칙에서 처리가 멈춥니다(`stopProcessing="true"`).**① 업로드 파일 허용**
```
data/uploads/ 경로는 이미지 서빙을 허용합니다.
단, .php 파일은 이 경로에서도 절대 실행되지 않습니다.
```
**② 민감한 폴더 직접 접근 차단**
```
data/ → 403 Forbidden
core/ → 403 Forbidden
```
세션, 캐시, 로그, 소스 코드에 외부에서 직접 접근할 수 없습니다.
**③ 정적 자원 허용**
```
install/ → 설치 파일
assets/ → JS, CSS 등 공통 자산
themes/ → 테마 CSS, JS, 이미지
plugins/*.css|js → 플러그인 정적 파일
```
**④ 실제 파일은 그대로 서빙**
```
물리적으로 존재하는 파일(이미지 등)은 PHP를 거치지 않고 직접 응답합니다.
```
**⑤ 나머지 모든 요청 → index.php 로 전달**
```
/board/notice → index.php 가 처리
/mall/products → index.php 가 처리
/api/comment → index.php 가 처리
```
CMS의 라우터(DxRouter)가 URL을 분석해서 해당 컨트롤러로 연결합니다.
### 보안 헤더
PHP 레벨(Secure.php)과 별개로 IIS 레벨에서도 기본 보안 헤더를 추가합니다.```
X-Frame-Options: SAMEORIGIN ← 클릭재킹 방지
X-Content-Type-Options: nosniff ← MIME 타입 스니핑 방지
X-XSS-Protection: 1; mode=block ← XSS 필터 활성화
Referrer-Policy: strict-origin-... ← 리퍼러 정보 제한
X-Powered-By: (제거) ← PHP 버전 정보 노출 방지
```
---
## 4. web.config.no-rewrite
URL Rewrite 모듈이 없는 환경(공유호스팅 IIS 등)에서 사용합니다.### 사용 방법
```기존 web.config 파일명 변경 또는 삭제
web.config.no-rewrite 파일을 web.config 로 복사
```
### 동작 방식
URL Rewrite 없이도 CMS가 동작하도록 `?_url=` 쿼리스트링 방식으로 라우팅됩니다.```
# Rewrite 있을 때
https://site.com/board/notice# Rewrite 없을 때 (자동 처리, 사용자에게는 동일하게 보임)
https://site.com/index.php?_url=/board/notice
```
SEO 관점에서 URL Rewrite 사용을 권장하지만, 기능 동작에는 차이가 없습니다.
---
## 5. 자주 묻는 문제
**Q. 설치 후 모든 페이지에서 500 에러가 납니다.**URL Rewrite 모듈이 없는 환경에서 `web.config`의 `<rewrite>` 블록이 로드되면 발생합니다. `web.config.no-rewrite`로 교체하거나, URL Rewrite 모듈을 설치하세요.
**Q. 이미지 업로드가 안 됩니다.**
`fix_permissions.bat`을 관리자 권한으로 실행했는지 확인하세요. 실행 후 반드시 `iisreset /restart`로 IIS를 재시작해야 적용됩니다.
**Q. data/ 폴더 파일이 브라우저에서 열립니다.**
`web.config`의 `DX Block data` 규칙이 동작하지 않는 상태입니다. URL Rewrite 모듈 설치 여부를 확인하세요.
**Q. PHP 세션이 유지되지 않습니다.**
`data\sessions` 폴더에 `IIS_IUSRS` 쓰기 권한이 없는 경우입니다. `fix_permissions.bat`을 다시 실행하세요.
---
## 6. 환경별 권장 구성
| 환경 | web.config | URL Rewrite ||---|---|---|
| 전용서버 / VPS (IIS) | `web.config` | 설치 필요 |
| 공유호스팅 IIS | `web.config.no-rewrite` | 불필요 |
| Apache / Nginx | `.htaccess` 또는 `nginx.conf` 사용 | 해당 없음 |