사용자 도구

사이트 도구


apache:mod_rewrite

Apache mod_rewrite

기본

RewriteEngine on
RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)$ display.php?country=$1&state=$2&city=$3 [L]
  • URI 비교 대상은 {REQUEST_URI} 값이다. 쿼리 파라미터는 제외됨.
  • Apache 1.x 에서는 도메인 바로 뒤의 슬래시(/)를 정규표현식에 포함해야 했으나, 2.x 부터는 / 제외하고 매칭.
    • 둘 다 만족시키는 매칭 : ^/? 로 시작하면 된다.
  • RewriteCond 를 통해 Apache 변수(variable)의 값을 조건별로 판단해서 룰을 적용할수 있다.
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule .? http://www.example.com%{REQUEST_URI} [R=301,L]  
  • RewriteCond 의 !은 not 을 뜻한다. 즉, www.example.com아닌 다른 도메인으로 왔을 경우에 조건이 발동된다.

Flags

  • 플래그는 조건이나 규칙(Rule)의 끝에 [] 로 감싸서 넣는다. 여러 플래그가 들어갈 경우에는 쉼표(,)로 구분한다.
  • last|L : Rewrite 조건 블럭의 끝(last)를 뜻한다. mod_rewrite 자체를 끝내는 것은 아니다.
  • nocase|NC : regex 검사시 대소문자 구분 안함.
  • redirect:R : 몰래 rewrite하지 않고, 브라우저가 redirect하도록 한다. 기본 HTTP 302 응답(moved temporarily)을 보낸다. [R=301]로 하면 moved permanently 를 뜻한다(검색엔진이 인덱스를 다시 생성하게 함).
  • qsappend|QSA : Query String Appended. 현재 받은 쿼리 문자열을 재설정한 URL에도 동일하게 보낸다.
  • forbidden|F : HTTP 403 Forbidden 응답(페이지 제공 안함)
  • ornext|OR : 조건 생성시 logical OR 의 역할을 한다.
  • next|N : 마지막에 재생성된 URI를 기준으로 해서, 모든 mod_rewrite 조건을 처음부터 다시 체크한다.
  • passthrough|PT : 최종 생성된 결과를 파일 경로로 간주하지 않고 또 다른 URI로 간주한다. 이는 Alias, Redirect, ScriptAlias 등을 사용했을 경우에 꼭 필요하다. 이들은 존재하는 파일 경로를 가리키지 않는 URI를 만들어내기 때문이다.

주석 달기

RewriteEngine off
Rewrite 관련 코드들...
...
RewriteEngine on

위와 같이 하면 off 이하부터 on 이상 까지의 구문이 주석처럼 실행이 안된다.

요청 금지

RewriteEngine on
RewriteRule \.exe - [F]
  • *.exe의 모든 요청을 금지한다.
  • [F]는 자체적으로 더이상의 Rewrite를 중단하는 [L]을 내포한다.
apache/mod_rewrite.txt · 마지막으로 수정됨: 2013/08/19 16:02 저자 kwon37xi