.htaccess
기본 정보
- 이름:
.htaccess - 분류: Apache 설정 파일
- 사용 서버: Apache HTTP Server
- 주요 용도: URL Rewrite, 접근 제어, 리디렉션, 보안 설정
- 관련 주제: #Apache #htaccess #Rewrite #SEO #보안
개요
.htaccess는 Apache 웹 서버에서 디렉터리 단위로 적용되는 설정 파일이다.
서버 전체 설정 파일(httpd.conf)을 수정하지 않고도 URL 변경, 접근 제한, HTTPS 강제, 캐시 설정, 보안 강화 등의 기능을 구현할 수 있다.
PHP 기반의 그누보드, 워드프레스, 영카트 등에서 매우 자주 사용된다.
주요 특징
- 디렉터리별 설정 가능
- URL Rewrite 지원
- HTTPS 리디렉션
- 접근 권한 제어
- IP 차단
- 캐시 설정
- 압축 설정
- 에러 페이지 지정
동작 구조
Browser
↓
Apache
↓
.htaccess 확인
↓
설정 적용
↓
PHP 또는 HTML 실행
↓
Response
파일 위치
/var/www/html/.htaccess
또는
/public_html/.htaccess
보통 웹 루트 디렉터리에 위치한다.
Rewrite 활성화
RewriteEngine On
URL Rewrite 기능을 사용할 때 가장 먼저 선언한다.
URL Rewrite
기존 URL
/board.php?id=100
변경 후
/board/100
설정
RewriteEngine On
RewriteRule ^board/([0-9]+)$
board.php?id=$1
[L,QSA]
SEO 친화적인 URL 구성에 많이 사용된다.
HTTPS 강제
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$
https://%{HTTP_HOST}%{REQUEST_URI}
[L,R=301]
모든 요청을 HTTPS로 리디렉션한다.
www 통일
RewriteCond %{HTTP_HOST}
^www\.(.*)$ [NC]
RewriteRule ^(.*)$
https://%1/$1
[L,R=301]
index.php 제거
RewriteCond %{REQUEST_FILENAME}
!-f
RewriteCond %{REQUEST_FILENAME}
!-d
RewriteRule ^(.*)$
index.php/$1
[L]
CodeIgniter 등에서 자주 사용된다.
특정 파일 접근 차단
<Files ".env">
Require all denied
</Files>
민감한 설정 파일 보호에 사용된다.
PHP 파일 접근 제한
<Files "config.php">
Require all denied
</Files>
특정 IP 차단
Require all granted
Require not ip 192.168.0.100
특정 국가 차단
GeoIP 모듈과 함께 사용할 수 있다.
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
Deny from env=BlockCountry
디렉터리 목록 차단
Options -Indexes
폴더 내 파일 목록 노출을 방지한다.
에러 페이지 지정
ErrorDocument 404 /404.html
또는
ErrorDocument 500 /500.html
캐시 설정
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/png "access plus 1 month"
</IfModule>
브라우저 캐시를 활용하여 성능을 향상시킨다.
Gzip 압축
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE
text/html
text/css
application/javascript
</IfModule>
전송 용량을 줄여 로딩 속도를 높인다.
CORS 허용
<IfModule mod_headers.c>
Header set
Access-Control-Allow-Origin "*"
</IfModule>
API 서버에서 자주 사용된다.
XSS 방지 Header
Header set
X-XSS-Protection
"1; mode=block"
클릭재킹 방지
Header always append
X-Frame-Options
SAMEORIGIN
MIME 타입 지정
AddType
application/json
.json
이미지 Hotlink 방지
RewriteEngine On
RewriteCond %{HTTP_REFERER}
!^$
RewriteCond %{HTTP_REFERER}
!example.com [NC]
RewriteRule
\.(jpg|png)$
-
[F]
외부 사이트의 이미지 무단 사용을 차단할 수 있다.
워드프레스 기본 예제
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
그누보드 활용 사례
대표적으로 다음 기능에 활용된다.
- SEO URL
- HTTPS 강제
- 첨부파일 접근 제한
- PHP 실행 제한
- 디렉터리 보호
- 캐시 설정
- 보안 Header 추가
장점
- 서버 재시작 없이 적용 가능
- 디렉터리별 설정 가능
- URL Rewrite 지원
- 보안 설정 가능
- SEO 개선 가능
- 유지보수가 편리함
단점
- 요청마다 파일을 읽어 성능 저하 가능
- 설정 오류 시 500 에러 발생
- Nginx에서는 사용할 수 없음
- 복잡한 Rewrite 규칙은 관리가 어려울 수 있음
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
Options -Indexes적용- HTTPS 강제 적용
.env,config.php접근 차단- Gzip 압축 활성화
- 브라우저 캐시 설정
- 보안 Header 추가
ServerSignature Off- 불필요한 Rewrite 최소화
- VirtualHost 설정으로 이전 가능한 내용은 서버 설정으로 이동
- 변경 후
apachectl configtest로 문법 검사
.htaccess와 함께 사용하는 기술
관련 문서
출처
- Apache 공식 문서 -
.htaccess - Apache mod_rewrite Documentation
- Apache HTTP Server Security Guide