사용자 도구

사이트 도구


apache:mod_rewrite

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
apache:mod_rewrite [2011/06/09 20:41]
kwon37xi
apache:mod_rewrite [2013/08/19 16:02] (현재)
kwon37xi [주석 달기]
줄 1: 줄 1:
 ====== Apache mod_rewrite ====== ====== Apache mod_rewrite ======
   * URL을 변경해서 요청하는 모듈   * URL을 변경해서 요청하는 모듈
 +  * [[http://httpd.apache.org/docs/current/mod/mod_rewrite.html|Apache mod_rewrite]] : 공식 문서
   * [[http://www.yourhtmlsource.com/sitemanagement/urlrewriting.html|URL Rewriting | redirecting URLs with Apache’s mod_rewrite]] : 매운 간단한 mod_rewrite 소개   * [[http://www.yourhtmlsource.com/sitemanagement/urlrewriting.html|URL Rewriting | redirecting URLs with Apache’s mod_rewrite]] : 매운 간단한 mod_rewrite 소개
-  * [[http://httpd.apache.org/docs/current/mod/mod_rewrite.html|Apache mod_rewrite]] +  * [[http://blogs.sitepoint.com/apache-mod_rewrite-examples/|Learn Apache mod_rewrite: 13 Real-world Examples Article » SitePoint]] : 기초와 활용법을 배울 수 있는 문서 
-  * [[http://blogs.sitepoint.com/apache-mod_rewrite-examples/|Learn Apache mod_rewrite: 13 Real-world Examples Article » SitePoint]]+ 
 +===== 기본 ===== 
 +<code apache> 
 +RewriteEngine on 
 +RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)$ display.php?country=$1&state=$2&city=$3 [L] 
 +</code>
  
-===== 작동원리 ===== 
   * URI 비교 대상은 {REQUEST_URI} 값이다. 쿼리 파라미터는 제외됨.   * URI 비교 대상은 {REQUEST_URI} 값이다. 쿼리 파라미터는 제외됨.
   * Apache 1.x 에서는 도메인 바로 뒤의 슬래시(/)를 정규표현식에 포함해야 했으나, 2.x 부터는 / 제외하고 매칭.   * Apache 1.x 에서는 도메인 바로 뒤의 슬래시(/)를 정규표현식에 포함해야 했으나, 2.x 부터는 / 제외하고 매칭.
     * 둘 다 만족시키는 매칭 : **^/?** 로 시작하면 된다.     * 둘 다 만족시키는 매칭 : **^/?** 로 시작하면 된다.
  
 +  * RewriteCond 를 통해 Apache 변수(variable)의 값을 조건별로 판단해서 룰을 적용할수 있다.
 +<code apache>
 +RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
 +RewriteRule .? http://www.example.com%{REQUEST_URI} [R=301,L]  
 +</code>
 +  * RewriteCond 의 **!**은 not 을 뜻한다. 즉, www.example.com 이 **아닌** 다른 도메인으로 왔을 경우에 조건이 발동된다.
 +
 +===== Flags =====
 +  * [[http://httpd.apache.org/docs/current/rewrite/flags.html|플래그]]는 조건이나 규칙(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를 만들어내기 때문이다.
 +===== 주석 달기 =====
 +<code apache>
 +RewriteEngine off
 +Rewrite 관련 코드들...
 +...
 +RewriteEngine on
 +</code>
 +위와 같이 하면 off 이하부터 on 이상 까지의 구문이 주석처럼 실행이 안된다.
 +
 +===== 요청 금지 =====
 +<code apache>
 +RewriteEngine on
 +RewriteRule \.exe - [F]
 +</code>
 +
 +  * *.exe의 모든 요청을 금지한다.
 +  * ''[F]''는 자체적으로 더이상의 Rewrite를 중단하는 ''[L]''을 내포한다.
apache/mod_rewrite.1307619671.txt.gz · 마지막으로 수정됨: 2011/06/09 20:41 저자 kwon37xi