728x90
반응형

아래의 예시 자료는 hostgator.com/help/article/의 내용을 참조로 하였음을 밝힙니다.

(출처 :  https://www.hostgator.com/help/article/apache-mod-rewrite-and-examples )

 

https://httpd.apache.org/docs/trunk/rewrite/intro.html

 

Apache mod_rewrite Introduction - Apache HTTP Server Version 2.5

Apache mod_rewrite Introduction This document supplements the mod_rewrite reference documentation. It describes the basic concepts necessary for use of mod_rewrite. Other documents go into greater detail, but this doc should help the beginner get their fee

httpd.apache.org

 

https://httpd.apache.org/docs/trunk/mod/mod_rewrite.html

 

mod_rewrite - Apache HTTP Server Version 2.5

Apache Module mod_rewrite Summary The mod_rewrite module uses a rule-based rewriting engine, based on a PCRE regular-expression parser, to rewrite requested URLs on the fly. By default, mod_rewrite maps a URL to a filesystem path. However, it can also be u

httpd.apache.org

 

 

 

Regex vocabulary

CharacterMeaningExample

. Matches any single character ( 한글자 매칭) c.t will match cat, cot, cut, etc
+ Repeats the previous match one or more times
( 첫글자로 시작하면서 반복하는 경우)
a+ matches a, aa, aaa, etc
* Repeats the previous match zero or more times
( 임의의 길이의 글자(/기호)들 )
a* matches all the same things a+ matches, but will also match an empty string
? Makes the match optional
(앞글자를 지울지? 말지?)
colou?r will match color and colour
\ Escape the next character
(이스케이프 문자 처리할 때 )
\. will match . (dot) and not any single character as explain above
^ Called an anchor, matches the beginning of the string
(첫글자가 ^뒤에 오는 글자인 경우)
^a matches a string that begins with a
$ The other anchor, this matches the end of the string
(마지막 글자가 $ 앞에 있는 글자인 경우)
a$ matches a string that ends with a
( ) Groups several characters into a single unit, and captures a match for use in a backreference
( 지정한 복수개의 글자들 단위  지정)
(ab)+ matches ababab - that is, the + applies to the group. For more on backreferences see below
[ ] A character class - matches one of the characters
( ~중에 한 글자 )
c[uoa]t matches cut, cot or cat
[^  ]  Negative character class - matches any character not specified
( ~의 글자가 아닌 경우)
c[^/]t matches cat or c=t but not c/t

 

 

 

Regex Back-Reference Availability

해석

   (  ) 로 묶인 그룹캐릭터를은   $N 또는 %N   즉,  달러 N 또는 퍼센티지 N으로 지칭될 수 있다.

   ([a-z]+)  는   Rule에 있으므로   $ 로 받을 수 있으며,  인덱스는 1이다.  그래서 결국  $1 이다.   임의의 길이의 알파벳...

   (.*) 는 임의길이의 글자/숫자/기호  를 나타내며  $2로 받는다.

  (admin.example.com)은  새로운 단위지정이고,  Cond 에 있으므로 %(퍼센티지)로 받아서 %1 이된다.

  결국,  /test/1234   로 요청이 오면,    /admin.foo?page=test&id=1234&host=admin.example.com. 로 변형한다.

 

 

RewriteRule Basics

 

RewriteRule Pattern Substitution Flags 또는

RewriteRule Pattern target Flags

 

 

 

 

       Substitution         

 

1. A full filesystem path to a resource 

RewriteRule "^/games" "/usr/local/games/web/puzzles.html"

        요청을  /usr/local/games/web/puzzles.html 로 매핑. 즉, 임임의 파일시스템의 리소스로 연결 가능

 

2. A web-path to a resource

RewriteRule "^/games$" "/puzzles.html"

         웹 서비스의 패스 기준으로 연결.( DocumentRoot 가 지정되어 있을 경우.)

        http://example.com/games   ->     /usr/local/apache2/htdocs/puzzles.html 

 

3. An absolute URL

RewriteRule "^/product/view$" "http://site2.example.com/seeproduct.html" [R]

           특정 URL로 새로운 요청을 처리한다.

 

 

   Rewrite Conditions      

      1개 이상의  RewriteCond 이라는 Directive를 사용할 수 있다.  요청에 대해 한정된 조건을 체크한다. 뒤 따르는 RewriteRule을 한정한다.

RewriteCond "%{REMOTE_ADDR}" "^10\.2\."
RewriteRule "(.*)"           "http://intranet.example.com$1"

      10.2.  로 시작하는 IP에 대한 요청은 무조건  http://intranet.example.com 쪽으로 돌린다.

 

 

RewriteCond "%{QUERY_STRING}" "hack"
RewriteCond "%{HTTP_COOKIE}"  !go
RewriteRule "."               "-"   [F]

   복수 개의 RewriteCond 조건은  && 이다. 즉 2개 다 만족하여야 한다. 

 

 

RewriteCond "%{HTTP_HOST}" "(.*)"
RewriteRule "^/(.*)"       "/sites/%1/$1"

  요청이   http://example.com/foo/bar  일 경우,    %1의 값은  example.com 이 되고,   $1의 값은 foo/bar 가 된다.

  이에    최종적으로  http://example.com/site/example.com/foo/bar 로  연결시킨다.

 

 

 

Server-Variables

HTTP headers

connection & request:

server internals:

date and time:

specials:

HTTP_ACCEPT
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_REFERER
HTTP_USER_AGENT
AUTH_TYPE
CONN_REMOTE_ADDR
CONTEXT_PREFIX
CONTEXT_DOCUMENT_ROOT
IPV6
PATH_INFO
QUERY_STRING
REMOTE_ADDR
REMOTE_HOST
REMOTE_IDENT
REMOTE_PORT
REMOTE_USER
REQUEST_METHOD
SCRIPT_FILENAME
 
DOCUMENT_ROOT
SCRIPT_GROUP
SCRIPT_USER
SERVER_ADDR
SERVER_ADMIN
SERVER_NAME
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
API_VERSION
CONN_REMOTE_ADDR
HTTPS
IS_SUBREQ
REMOTE_ADDR
REQUEST_FILENAME
REQUEST_SCHEME
REQUEST_URI
THE_REQUEST

 

 

 

 

 

Redirect All Website Pages

# Redirect all pages from olddomain.com
# to newdomain.com
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.olddomain.com$ [OR]
RewriteCond %{HTTP_HOST} ^olddomain.com$
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

해석 

   예로써   http://www.oldmain.com/aaa.html    은   http://www.newdomain.com/aaa.html   로  Redirect 함.

   aaa.html 이   $1 인 듯.  즉   ^(.*)    를  $1으로 받아서 전달함.

   HTTP  HOST가   www.olddomain.com   또는(OR)  olddomain.com  일 경우,....

 

 

 

RewriteCond  "%{HTTP_USER_AGENT}"  "(iPhone|Blackberry|Android)"
RewriteRule  "^/$"                 "/homepage.mobile.html"  [L]

RewriteRule  "^/$"                 "/homepage.std.html"     [L]

모바일 단말기 일때는 모바일 웹페이지로, 아니면 기본으로  std 웹페이지로....

 

 

 

F|forbidden   Flag

RewriteRule "\.exe"   "-" [F]

  .exe file에 대한 접근을 막는다,  단순히 응답을 403으로 리턴하게 된다. 

 target에 "-" 은   target에 대해  URI를 변경하지 않는다 즉 No Substitution이 된다.

 

 

 

S|skip

# Does the file exist?
RewriteCond "%{REQUEST_FILENAME}" !-f
RewriteCond "%{REQUEST_FILENAME}" !-d
# Create an if-then-else construct by skipping 3 lines if we meant to go to the "else" stanza.
RewriteRule ".?"                  "-" [S=3]

# IF the file exists, then:
    RewriteRule "(.*\.gif)"  "images.php?$1"
    RewriteRule "(.*\.html)" "docs.php?$1"
    # Skip past the "else" stanza.
    RewriteRule ".?"         "-" [S=1]
# ELSE...
    RewriteRule "(.*)"       "404.php?file=$1"
# END

 

P|Proxy

RewriteRule "/(.*)\.(jpg|gif|png)$" "http://images.example.com/$1.$2" [P]

 

NC|nocase

RewriteRule "(.*\.(jpg|gif|png))$" "http://images.example.com$1" [P,NC]

  .jpg and .JPG 모두 프락시(P)로 처리된다.

 

NE|noescae

RewriteRule "^/anchor/(.+)" "/bigpage.html#$1" [NE,R]

    /anchor/xyz  를   /bigpage.html#xyz  로 리다이렉트시킨다.      # 같은 기호를 hexacode(%23)로 변환하지 않는다.

 

 

 

728x90
반응형

+ Recent posts