아래의 예시 자료는 hostgator.com/help/article/의 내용을 참조로 하였음을 밝힙니다.
(출처 : https://www.hostgator.com/help/article/apache-mod-rewrite-and-examples )
https://httpd.apache.org/docs/trunk/rewrite/intro.html
https://httpd.apache.org/docs/trunk/mod/mod_rewrite.html
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)로 변환하지 않는다.
'프로그램언어(JAVA , Python)' 카테고리의 다른 글
spring boot : 어플리케이션 구조, Layered 구조 예시( 개발 순서 및 결과물 ) (0) | 2023.06.29 |
---|---|
[Spring-boot:Swagger] Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException (0) | 2023.06.27 |
[HTML] Google 검색( 크롤링/인덱싱 ) 유도, <a> URL link & 숨기기 (0) | 2023.02.14 |
HTML 소스코드에서 span 요소 제거하기 :: 문장추출 (1) | 2023.01.27 |
[Python] 로그파일 사용자정의함수에 의한 로그로테이션 및 파일 사용자명/그룹명 변경 (0) | 2022.01.21 |