1. 서버별 설정 파일 상세
2.1 Apache — 루트 .htaccess
주요 규칙 설명
| 규칙 |
내용 |
효과 |
| Options -Indexes |
디렉토리 목록 비활성화 |
폴더 구조 노출 방지 |
| RewriteEngine On |
mod_rewrite 활성화 |
URL Rewrite 사용 가능 |
| data/uploads/ 통과 |
RewriteRule ^data/uploads/ - [L] |
이미지 파일 직접 서빙 허용 |
| data/, core/ 차단 |
RewriteRule ^data/ - [F,L] |
config.php, PHP 코어 접근 차단 |
| sitemap/robots 라우팅 |
RewriteRule ^sitemap.*\.xml$ index.php |
PHP에서 동적 생성 |
| 정적 파일 통과 |
RewriteCond %{REQUEST_FILENAME} -f |
실존 파일은 그대로 서빙 |
| 나머지 → index.php |
RewriteRule ^ index.php [QSA,L] |
모든 동적 요청을 단일 진입점으로 |
| PHP 파일 직접 차단 |
FilesMatch \.php$ |
index.php 외 PHP 직접 실행 불가 |
| 민감 파일 차단 |
.env, .log, .bak, .sql, .sh 등 |
설정/로그 파일 다운로드 차단 |
| Authorization 헤더 전달 |
RewriteRule ^ - [E=HTTP_AUTHORIZATION:...] |
REST API 인증 헤더 전달 |
✅ mod_rewrite가 없는 환경에서도 루트 .htaccess는 mod_alias의 RedirectMatch로 data/와 core/를 차단하고, Secure.php가 PHP 레벨에서 보안 헤더를 발행합니다.
1.2 Nginx — nginx.conf.example
PHP 버전별 fastcgi_pass 수정
| PHP 버전 |
fastcgi_pass 경로 예시 |
| PHP 8.1 |
unix:/run/php/php8.1-fpm.sock |
| PHP 8.0 |
unix:/run/php/php8.0-fpm.sock |
| PHP 7.4 |
unix:/run/php/php7.4-fpm.sock |
| TCP 방식 |
127.0.0.1:9000 |
서브디렉토리 설치 시 추가 설정
# 예: https://domain.com/cms/ 에 설치한 경우
location /cms/ {
try_files $uri /cms/index.php?$query_string;
}
1.3 IIS — web.config
URL Rewrite 규칙 우선순위
| 규칙 이름 |
매칭 |
처리 |
| DX Allow uploads |
^data/uploads/ |
None (그대로 서빙, PHP 실행 제외) |
| DX Block data |
^data(/|$) |
403 반환 |
| DX Block core |
^core(/|$) |
403 반환 |
| DX Allow install |
^install/ |
None (설치 PHP 실행 허용) |
| DX Allow assets |
^assets/ |
None (정적 파일 서빙) |
| DX Allow theme assets |
^themes/[^/]+/assets/ |
None |
| DX Allow files |
실존 파일 |
None (그대로 서빙) |
| DX Route to index |
나머지 모든 요청 |
index.php로 Rewrite |
2. 저가형 공유호스팅 설치
2.1 저가형 호스팅 환경 특성
| 항목 |
일반적 상황 |
DXCMS 대응 방식 |
| PHP 버전 |
PHP 5.6 ~ 7.x 혼재 |
PHP 5.6부터 완전 지원. ?? 연산자 미사용 |
| mod_rewrite |
지원하지 않는 경우 있음 |
?_url= 방식으로 자동 폴백 |
| PHP 직접 실행 |
.htaccess로 제어 |
AllowOverride가 제한된 환경도 대응 |
| Redis/APCu |
미지원 대부분 |
파일 캐시(data/cache/)로 자동 폴백 |
| cURL |
미지원 경우 있음 |
file_get_contents()로 자동 폴백 |
| OpenSSL |
미설치 경우 있음 |
mt_rand() 기반 난수로 폴백 (보안 강도 낮음) |
| GD |
미지원 경우 있음 |
썸네일•이미지 처리 기능 비활성화 |
| 보안 헤더 |
.htaccess mod_headers 미지원 |
Secure.php가 PHP header()로 직접 발행 |
| 세션 설정 |
호스팅 기본값 사용 |
ini_set()으로 PHP 레벨 강제 설정 시도 |
2.2 URL Rewrite 없는 환경 설치 확인
mod_rewrite가 없는 환경에서는 아래와 같이 동작을 확인합니다.
# 아래 URL이 정상 동작하면 ?_url= 폴백이 동작 중
https://your-domain.com/index.php?_url=/admin
index.php?_url=/경로 형식이 정상 동작하면 모든 기능이 사용 가능합니다. 단, 브라우저 주소창에 항상 index.php가 표시됩니다.