워드프레스 .htaccess RewriteRule 속성자와 플래그(Flags) 완벽 가이드

Last Updated on 2026/07/22 by Tomylove

🔄 콘텐츠 업데이트 히스토리 (History)

  • 최초 작성일: 2014년 4월 29일
  • 개정 사항: 아파치(Apache) mod_rewrite의 속성자 및 플래그(Flags) 직역 오류 정정, [L]과 [END]의 내부 루프 재처리 동작 차이 명확화, 2026년 기준 워드프레스 고유주소(Permalink) 모범 사례 및 SEO 301 리다이렉트 실무 코드 추가

워드프레스(WordPress) 사이트를 운영하거나 SEO(검색엔진 최적화) 작업을 진행할 때 가장 자주 다루게 되는 핵심 설정 파일이 바로 .htaccess입니다.

웹 서버가 요청을 받아 처리할 때 주소를 재작성하거나 원하는 곳으로 보낼 수 있는 강력한 무기이지만, 아파치(Apache)의 mod_rewrite 모듈 문법을 정확히 이해하지 못하면 뜻하지 않은 무한 루프(Loop)나 500 Internal Server Error를 겪기 쉽습니다.

본 문서에서는 워드프레스에서 활용되는 RewriteCond의 파일·디렉터리 속성자(Attributes)부터 RewriteRule에서 사용되는 필수 플래그(Flags)의 정확한 개념과 실무 적용 사례를 정리합니다.

htaccess rewriterule 파일 및 디렉토리 속성자 datatype 및 Flag 리다이렉트

1. RewriteCond 조건문: 파일 및 디렉터리 속성자

RewriteCond 구문 뒤에 작성하는 속성자는 요청된 URL 경로가 웹 서버 상의 실체 파일이나 디렉터리인지 검사할 때 사용됩니다. 워드프레스 기본 고유주소 규칙의 핵심이 되는 조건식입니다.

속성자 설명 영어 원문 및 의미
-f 테스트 경로가 존재하며, 정규 파일(Regular File)인지 검사합니다. Treats the TestString as a pathname and tests whether it is a regular file.
-d 테스트 경로가 존재하며, 디렉터리(Directory)인지 검사합니다. Treats the TestString as a pathname and tests whether it is a directory.
-l / -L / -h 테스트 경로가 심볼릭 링크(Symbolic Link)인지 검사합니다. Tests whether it is a symbolic link. May also use Bash convention (-L, -h).

💡 부정 연산자 ‘!’의 활용:
모든 속성자 앞에는 느낌표(!)를 붙여 조건식을 반대로 뒤집을 수 있습니다.
예를 들어 RewriteCond %{REQUEST_FILENAME} !-f는 “요청된 파일이 실제 존재하는 파일이 아닐 때”를 의미합니다.

htaccess rewriterule 파일 및 디렉토리 속성자 워드프레스

2. RewriteRule 주요 플래그(Flags) 상세 분석

RewriteRule 구문 마지막 대괄호 안에 작성하는 플래그 [FLAG]는 치환(Rewrite)된 주소를 아파치 서버가 어떻게 다룰지 지정하는 제어 명령입니다.

  • [L] | last: 현재 규칙이 일치하면 규칙 평가를 즉시 중단합니다. 단, .htaccess와 같은 디렉터리 단위 컨텍스트에서는 내부 재요청(Internal Sub-request)이 발생하여 .htaccess 첫 줄부터 다시 실행될 수 있습니다.
  • [END]: 아파치 2.3.9 이상에서 지원하며, 재작성 과정을 즉시 완전히 종료합니다. [L]과 달리 .htaccess 내부 재처리 루프 자체를 방지하므로 무한 루프 예방에 효과적입니다.
  • [NC] | nocase: 패턴 비교 시 대소문자를 구분하지 않습니다. (Case-Insensitive)
  • [QSA] | qsappend: 원래 요청에 포함되어 있던 쿼리 스트링(Query String, 예: ?page=2)을 치환될 URL의 쿼리 뒤에 결합(Append)하여 보존합니다.
  • [QSD] | qsdiscard: 원래 요청의 쿼리 스트링을 모두 버립니다.
  • [R=code] | redirect: 클라이언트 브라우저에 외부 리다이렉트를 전달합니다. 기본값은 302(임시 이동)이며, SEO 목적일 경우 [R=301,L]과 같이 301(영구 이동)을 명시해야 주소 변경에 따른 SEO 평가 점수가 보존됩니다.
  • [F] | forbidden: 403 Forbidden 응답을 반환하고 처리를 중단합니다. 보안 규칙 작성 시 유용합니다.
  • [G] | gone: 410 Gone 응답을 반환합니다. 삭제된 페이지임을 명확히 알릴 때 쓰입니다.
  • [C] | chain: 다음 규칙과 체인(연결)시킵니다. 현재 규칙이 실패하면 연결된 다음 규칙도 실행되지 않고 건너뜁니다.
  • [CO=NAME:VAL:domain:lifetime:path:secure:httponly] | cookie: 응답 시 브라우저에 쿠키를 설정합니다.
  • [NE] | noescape: 치환 결과에서 특수문자를 16진수로 이스케이프(Hex-code escaping) 처리하지 못하도록 막습니다.
  • [P] | proxy: 대체 URL을 프록시(Proxy) 요청으로 보냅니다. mod_proxy 모듈이 필요합니다.

3. 실제 적용 실무 예시: 워드프레스 기본 구조 해설

이 개념들이 실제로 워드프레스 사이트의 .htaccess에서 어떻게 조합되는지 살펴보면 다음과 같습니다.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

위 기본 규칙의 작동 방식을 해석하면 아래와 같습니다.

  1. 요청 파일이 index.php면 추가 작업 없이 처리를 종료합니다. ([L])
  2. 요청된 경로가 실제 존재하는 파일이 아니고(!-f), 디렉터리도 아니라면(!-d),
  3. 모든 요청을 워드프레스 메인 컨트롤러인 /index.php로 보냅니다. ([L])

4. 자주 활용되는 고급 SEO 리다이렉트 패턴

사이트 도메인을 변경하거나 HTTP에서 HTTPS로 보안 접속을 강제할 때 쓰는 표준 문법입니다.

HTTPS 접속 강제 설정 (301 Redirect)

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

www가 없는 도메인으로 통일 (Non-WWW)

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
워드프레스 htaccess rewriterule 파일 및 디렉토리 속성자

자주 묻는 질문 (FAQ)

Q1. [L] 플래그를 붙였는데도 규칙이 계속 실행되는 느낌입니다. 이유가 무엇인가요?

A. .htaccess 파일 환경에서는 [L] 플래그를 만나 평가가 중단되더라도, URL이 변경된 후 아파치가 이를 새로운 요청으로 간주하여 .htaccess를 처음부터 다시 읽는 내부 재요청(Internal Sub-request)을 발생시킬 수 있습니다. 이를 완벽히 방지하고 싶다면 아파치 2.3.9 이상에서 제공하는 [END] 플래그를 사용하는 것이 해결책이 될 수 있습니다.

Q2. URL 뒤에 파라미터(?page=1)가 붙어오는데 보존하려면 어떻게 하나요?

A. 규칙 끝의 플래그에 [QSA] (Query String Append)를 추가해야 합니다. 예: [R=301,L,QSA]


참고 공식 문서 (Official Reference):
Apache HTTP Server Version 2.4 – Module mod_rewrite Documentation

워드프레스 최적화 관련 추천 글