.htaccess 최종 수정일 2026-06-19 01:51 조회수 12
대시보드

.htaccess

기본 정보

  • 이름: .htaccess
  • 분류: Apache 설정 파일
  • 사용 서버: Apache HTTP Server
  • 주요 용도: URL Rewrite, 접근 제어, 리디렉션, 보안 설정
  • 관련 주제: #Apache #htaccess #Rewrite #SEO #보안

개요

.htaccessApache 웹 서버에서 디렉터리 단위로 적용되는 설정 파일이다.

서버 전체 설정 파일(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