[ Server ][ Linux ] CentOS7 rewrite_mod 설정방법 > linux

본문 바로가기
사이트 내 전체검색

linux

[ Server ][ Linux ] CentOS7 rewrite_mod 설정방법

페이지 정보

작성자 웹지기 댓글 2건 조회 13,763회 작성일 18-09-28 11:54

본문

Apache rewrite Module    -작성자 : 윤일-

:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

Apache 는 추가적으로 사용할 수 있는 유용한 모듈들을 제공합니다.

이번강좌에서는 Apache의 URL Rewrite 모듈을 사용하기 위한 컴파일,설치와 httpd.conf의 설정방법 그리고 활용방법에 대해 알아보겠습니다.

 

Apache 다운로드 : http://www.apache.org 1. rewrite 모듈을 사용하기 위한 Apache 컴파일옵션

Rewrite 모듈을 쓰기위한 Apache 컴파일 옵션은 --enable-rewrite 입니다.

Configure 실행시에  --enable-rewrite 만 추가하시면 Apache에서 rewrite 모듈을 사용할 있게 됩니다.

[root@superuser root]# ./cofigure prefix=/usr/local/apache2 --enable-rewrite

[root@superuser root]# make

[root@superuser root]# make install

 

1. Rewrite 를 적용할 수 있는 범위

Rewrite 설정은 Server Config, Virtual Host, Directory, .htaccess 에 설정할 수 있습니다.

 Apache 서버 전체에 Global 설정과 특정 가상호스트에만 적용하도록 할수 있고 특정 디렉토리에만 적용시킬수도 있습니다.

 

2. Rewrite 모듈 지시자

RewriteEngine

설정문법 : RewriteEngine On|Off

Rewriteing 엔진을 사용할지 여부를 설정합니다. 기본설정은 당연히 Off로 되어 있으며 RewriteEngine On 으로 설정하지 않는 이상 Rewritng 엔진을 활성화 시키지 않습니다.

 

현재 Apache에서 실행중인 모든 RewriteRule을 비활성화 시킬 때 RewriteRule 라인을 주석처리 하기보다 RewriteEngin Off 로 설정하는 것이 더 간편하고 올바른방법입니다.

 

RewreteLog

설정문법 : RewriteLog FILE-PATH

RewriteLog 지시자는 Rewrite 엔진의 로그를 그록할 파일을 지정합니다. RewriteLog 파일을 항상 남기기 보다 잘못된 Rewrite 규칙들을 디버킹할 때 사용하기를 권장합니다. 아파치와 마찬가지로 RewriteLog 파일도 방문자수가 많은사이트에서는 감당못할 정도의 로그파일을 남기기 때문에 시스템 여유공간이 많이 없는 시스템에서는 해당 파티션의 하드사용률 100%로 인한 재앙(?)을 불러올수도 있습니다. 다음강좌에서 소개될 로그파일 분석에서 언급하겠지만 로그파일은 유용한 디버깅 도구가 될수 있지만 잘못 관리하면 시스템의 치명적인 악으로 존재할수도 있습니다.

RewriteLog 지시자는 반드시 RewriteLogLevel 지시자와 함께 사용하여야 됩니다.

 

RewriteLogLevel

설정문법 : RewriteLogLevel Level

RewriteLogLevel 지시자는 RewriteLog 지시자로 설정한 로그파일에 기록할 로그들에 대해 얼마나 자세한 내용을 로그로 남길것인가에 대해 설정하는 지시자입니다.

기록할 로그 Level 은 0 ~ 9까지 사용할 수 있으며 0은 로그를 기록하지 않겠다는 의미입니다. Level 숫자가 높을수록 자세한 로그를 기록합니다

 

RewriteCond

설정문법 : RewriteCond TestStirng CondPattern

RewriteCond 지시자는 RewriteRule 과 함께 사용되는 규칙으로 RewriteCond 다음에 오는 RewriteRule은 RewrieteCond 에서 설정한 패턴과 일치해야지만 RewriteRule들을 실행한다.

 

RewriteRule

설정문법 : RewriteRule Pattern Substitution

Rewrite 모듈의 실질적인 Rewrite 규칙들을 적용하는 지시자입니다.

Pattern(Input URL) 을 Subtitution(Return URL)로 변경하기 위한 모든 규칙들은 이 지시자를 사용해서 설정해야 됩니다.

Pattern(Input URL) 에는 Perl 정규표현식을 사용할수 있기 때문에 Input URL 의 규칙을 유연하게 적용할 수 있습니다. 이 강좌에서는 기초적인 정규표현식 사용방법만 다루고 정규표현식에 대해 자세히 알고 싶으신 분은 정규표현식에 대한 강좌나 인터넷 문서를 참고하시기 바랍니다.

 

정규표현식 기초

. : 다수의 한문자

? : 0개 이상의 한문자

* : 0개 이상의 문자 또는 문자열

+ : 1개 이상의 문자 또는 문자열

(chars) : (, ) 안의 문자또는 문자열을 그룹으로 묶습니다. 이 문자그룹은 Substitution(return URL)에서 $N 의 변수로 활용할수 있습니니다.

^ : 문자열의 첫문(열)을 지정합니다.

: 문자열의 끝 문자(열)을 지정합니다.

\(역슬래쉬) : 정규표현식에서 특별한 의미로 사용되는 문자의 특수기능을 제거합니다.(예:(, ), [, ] . 등)

{n} : 정확히 n번 반복

{n,} : n번 이상 반복

{n,m} : n 이상 m 이하 반복

[chars] : 문자들의 범위 또는 표현할 수 있는 문자들을 설정합니다. 예) [a-z] : a 부터 z 까지의 소문자, [tT] : 소문자 t 또는 대문자 T

정규표현식 단축표현들

[:alpha:] : 알파벳. [a-zA-Z] 와 같은 표현

[:alnum:] : 알파벳과 숫자. [a-zA-Z0-9] 와 같은 표현

[:digit:] : 숫자 [0-9] 와 같은 표현

[:upper:] : 대문자. [A-Z] 와 같은 표현

 

RewriteRule 플래그

forbidden|F : 요청하는 페이지를 403 에러로 redirect 시킵니다. RedirectRule 이 적용되고 있는 페이지를 일시적으로 사용중단을 시키거나 사용자로 하여금 페이지 접근을 할수 없게 할 때 사용합니다.

) RewriteRule ^/test /home/blog/html/test.php [F]

사용자가 /test 로 접근할 경우 403 에러를 보냅니다.

gone|G : 요청하는 페이지를 410 에러로 redirect 시킵니다. 410 에러는 페이지가 사라젔거나 존재하지 않는다는 메시지입니다. 이것도 forbidden 과 마찬가지로 RedirectRule 이 적용되던 페이지를 일시적으로 중단시킬 때 유용하게 사용할 수 있습니다.

last|L : 이 플래그가 적용되면 뒤에 어떤 룰이 있더라도 이룰 아래의 규칙들은 적용되지 않고 RewriteRule 을 빠져나가게 됩니다. C, Perl, PHP 프로그램에서 루프를 빠져나가는 break 와 같은 의미를 가집니다.

chain|C : 이 플래그의 결과를 다음 RewriteRule 의 input 값으로 사용합니다. 예)

RewriteRule ^(.+) %{HTTP_HOST}$1 [C]

RewriteRule ^([^.]+)\.domain\.com(.*) /home/$1/public_html$2

이 룰은 사용자 홈의 도메인을 2차 도메인으로 자동설정해 줄 때 많이 쓰는 룰입니다. RewriteRule의 input은 도메인을 제외한 URI 를 인식하기 때문에 도메인까지 인식을 시켜서 다음 RewriteRule 로 체크를 하기 위해 사용한 것입니다.

즉 http://user_id.domain.com/hello.html 이란 요청이 들어오면  /home/user_id/public_html/hello.html 로 redirect 시켜줍니다. 위와 같이 2차 도메인을 이용해 계정 사용자의 홈을 지정하기 위해서는 DNS 세팅이 선행되어야 됩니다.

 

RwriteRule 설정예

 

1. http://yourdomain.com/user_id  ->  http://yourdomain.com/home.php?id=user_id

 

RewriteRule ^/([a-zA-Z0-9])$   /home/user_id/public_html/home.php?id=$1

설명 : 도메인(http://yourdomain.com) 뒤에 오는 영문숫자로된 문자열을 지정하면서 그룹으로 묶었습니다. 이렇게 그룹으로 설정된 문자열 Pattern 은 Substitution(return URL) 에서 $1 이라는 변수로 받아 사용하게 됩니다. 즉 http://yourdomain.com/superuser 라는 페이지 요청이 들어오면 실제로는 http://yourdomain.com/home.php?id=superuser 라는 페이지로 redirect 시켜줍니다. 블로그나 카페(동호회) 사이트에서 블로그 사용자의 ID 로 개인 블로그 주소를 부여할 때 http://blog.com/user_id 로 부여해 주지만 실제 실행되는 파일은 이와 같이 redirect 시켜주는 경우가 많습니다.

 

2. http://yourdomain.com/daum  -> http://www.daum.net

RewriteRule ^/daum$  -> http://www.daum.net

설명 : http://yourdomain.com/daum 라는 페이지 요청이 들어오면 도메인이 다른 http://www.daum.net 이라는 페이지로 redirect 시켜줍니다.

 

 

RewriteOptions

설정문법 : RewriteOptions Options

현재 사용할 수 있는 option 은 MaxRedirects=number 를 사용할 수 있으며 설정된 number값에 도달하게 되면 500 Internal Server Error 를 남기고 RewriteRule을 종료합니다. 잘못된 RewriteRule에 의한 무한 루프를 방지하기 위한 목적으로 사용되는데 시스템이 이유없이 다운된다거나 할 때 이 옵션과 Log 기록을 참고하여 디버깅 및 시스템 다운을 방지할 수 있습니다.

이 지사자는 Apache 2.0.45 이상에서 사용할 수 있습니다.

 

3. 실제 적용예

가상호스트 www.superuser.co.kr 에 대해 Rewrite Rule을 적용한 예입니다. 이 부분은 실제 운영되는 블로그 사이트를 위해 RewriteRule 을 적용한 예입니다.

<VirtualHost 211.206.201.xxx>

DocumentRoot /home/blog/html

ServerName blog.xxx.ac.kr

# 여기까지는 일반적인 가상호스트 설정입니다.

RewriteEngine on

# RewriteRule을 사용하기 위해 On 으로 설정합니다.

 

RewriteLog /home/blog/rewrite_log_admin3.log

RewriteLogLevel 9

# Rewrite 실행중 Log를 남기기 위해 로그파일과 로그레벨을 지정했습니다.

 

RewriteRule ^/tb/([a-zA-Z0-9]+)/([0-9]+)$ /home/blog/html/blog/trackback\.php\?id=$1&post_no=$2

# 위설정은 블로그에 등록된 포스트의 트랙백 주소를 부여하기 위해 설정한 RewriteRule 로써 Pattern에 두개의 그룹이 존재하고 return URL에 순서대로 각 그룹을 $1 과 $2 로 받아 GET 변수로 치환한것입니다.

 

RewriteRule ^/xml/([a-zA-Z0-9]+)$ /home/blog/html/blog/rss_feed\.php\?id=$1

# 각블로그별 RSS 주소를 실제 파일로 지정한것입니다.

 

RewriteCond %{REQUEST_URI}     !^/admin$

RewriteRule ^/([a-zA-Z0-9]+)$ /home/blog/html/blog/main\.php?id=$1

# 먼저 RewriteCond 로 실제 존재하는 admin 이라는 디렉토리를 이어지는 RewriteRule에서 제외시키고 http://domain.com/user_id 로의 요청을 모두 /home/blog/html/blog/main.php?id=user_id로 redirect 시키는 룰입니다.

 

RewriteRule ^/([a-zA-Z0-9]+)/([0-9]+)$ /home/blog/html/blog/main\.php\?id=$1&post_no=$2

# /user_id/1345 로 요청하는 페이지를 /home/blog/html/blog/main.php?id=user_id&post_no=1345 로 redirect 시키는 룰입니다.

 

</VirtualHost>

 

4. 마치면서

위에서 언급한 RewriteRule 뿐만 아니라 여러가지 상황에서 RewriteRule을 잘 활용한다면 아주 유용하게 웹페이지를 컨트롤 할수 있습니다. RewriteRule 을 세팅하기 이전에 반드시 정규표헌식에 대해 어느정도 공부한후 적용해 보실 것을 권합니다.

[이 게시물은 웹지기님에 의해 2019-03-15 15:45:57 knowledge에서 이동 됨]
추천0 비추천0

댓글목록

웹지기님의 댓글

웹지기 작성일

linux 에서 설정할 부분
버츄얼 호스트 설정 안에 다음을 넣는다
php_admin_vlaue register_globals on
버츄얼 설정 밖에
<Directory "/home/계정명/public_html/">
  Options FollowSymLinks
  AllowOverride FileInfo
</Directory>
추가
그렇지 않으면 .htaccess부분에 추가

웹지기님의 댓글

웹지기 작성일

디렉토리에 conf파일에 추가 하지 않으면 오류가 발생
.htaccess 파일에 rewirte를 추가
RewriteEngine On
재시작

Total 103건 5 페이지
  • 43 [ Server ][ Linux ] centos7 git 버젼업데이트
  • # make configure # ./configure --prefix=/usr # make all doc info @make all doc info 설치시 오류가 발생 @Can't locate ExtUtils/MakeMaker.pm 해결방법 # yum install perl-CPAN # sudo make install install-doc install-html install-info # git --...
  • 웹지기 04-01 8098 0 0 댓글 0
+1
  • 42 [ Server ][ Linux ] centos7 java ( jdk )설치 및 설정
  • @wget을 통해서 설치하므로 wget 설치 # yum install -y wget @다운로드 페이지로 이동해서 다운받을 버젼을 확인한다. https://www.oracle.com/technetwork/java/javase/downloads/index.html @설치된 리눅스의 비트수를 확인하고 거기에 맞는 버젼을 다운받아야 한다 # getconf LONG_BIT @다운로드를 눌러 페이지를 이동한후 승인을 눌러준 후 환...
  • 웹지기 03-18 10123 0 0 댓글 0
  • 41 [ Server ][ Linux ] CentOS7 cron 사용하기 / 파일 자동 실행 설정
  • 1. cron 설정[code][root@linux]# crontab -l//현재 cron 확인[root@linux]# crontab -e//cron 편집 - vi 와 사용법 같음(예)[root@SRV182 ~]# crontab -l30 04 10 * * /root/cron/account_month.php//매월 10일 04시 30분에 /root/cron/account_month.php를 실행하라[/code](필드 설정)필드번호의미첫번째 필드“분(minute)”을 의미. 0,1,2,3,,,,59분까...
  • 웹지기 09-27 11614 0 0 댓글 0
  • 열람중 [ Server ][ Linux ] CentOS7 rewrite_mod 설정방법
  • Apache rewrite Module-작성자 : 윤일-:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;Apache 는 추가적으로 사용할 수 있는 유용한 모듈들을 제공합니다.이번강좌에서는Apache의 URL Rewrite 모듈을 사용하기 위한 컴파일,설치와 httpd.conf의 설정방법 그리고 활용방법에 대해 알아보겠습니다.Apache 다운로드 :http://www.apache.org1....
  • 웹지기 09-28 13764 0 0 댓글 2
+1
  • 39 [ Server ][ Linux ] CentOS7 php_screw-1.5 설치 (php 소스 암호화)
  • * 설명php_screw 모듈을 설치하면 php 소스를 암호화 할 수 있다.php 가 설치되어 있는 상태에서 모듈만 추가한다.*소스 다운로드wgethttp://sourceforge.net/projects/php-screw/files/php-screw/1.5/php_screw-1.5.tar.gz*설치[root@ php_screw-1.5]# phpizeConfiguring for:PHP Api Version: 20041225Zend Module Api No: 20060613Zend Extension ...
  • 웹지기 09-27 9022 0 0 댓글 0
  • 38 [ Server ][ Linux ] CentOS7 php 소스 컴파일러 설치
  • php 소스컴파일 설치1. 라이브러리 설치// 컴파일 환경설정에 추가해준 라이브러리 들을 우선적으로 설치 해야 한다.// os를 인스톨 할때 선택해 주었다면 설치할 필요가 없다.// 빠진 것이 있다면 컴파일 실행시 경고메세지와 함께 컴파일이 중지된다.--libjpeg 설치 (다운로드 하는곳)----tar xvfz jpegsrc.v7.tar.gz----cd jpegsrc-v7----./configure --enable-shared --enable-static----make----make insta...
  • 웹지기 09-27 12185 0 0 댓글 0
  • 37 [ Server ][ Linux ][ htaccess ] 아이피 차단 관련 설정
  • * 국내아이피를 제외한 나머지 국가에 대해 아이피 차단시 첨부화일을 참고!* 특정 아이피를 차단할경우.htaccess 파일을 편집(만약 123.45.123.45 를 막는다고 할때) :namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;SetEnvIfNoCase remote_addr 123.45.123.45 go_outOrder allow,denyAllow from allDeny from env...
  • 웹지기 10-01 8676 0 0 댓글 0
  • 35 [ Server ][ Linux ] cron사용법(쉘스크립트, 리눅스 파일 자동실행)
  • ## 크론설정(쉘스크립트 실행)---------- ---------- ----------------------------------------------------------------------------------------------------필 드 의 미 범 위---------- ---------- ---------------------------------------------------------------------------------------------...
  • 웹지기 09-11 22076 0 0 댓글 0
  • 34 [ Server ][ Linux ] 계정 용량 확인 / 관리
  • [code]&lt;?php$du=`du -sk`;$save=100; //할당받은 계정용량, 단위 MBytes$du=$du/1000;$result1=$save-$du;$result2=$du;echo "&lt;font size='2' color='#0078FF'&gt;전체 용량 :&lt;font size='2' color='#ff6666'&gt; 100MB&lt;/font&gt;&lt;br&gt;";ec...
  • 웹지기 09-30 8438 0 0 댓글 0
  • 33 [ Server ][ Linux ] HTTP 1.1 분류 코드표(에러 코드표)
  • HTTP 에러 코드표 (from. 네이버 오픈백과)100 ::: Continue101 ::: Switching Protocols200 ::: OK, 에러없이 전송 성공202 ::: Accepted, 서버가 클라이언트의 명령을 받음.203 ::: Non-authoritavive Information, 서버가 클라이언트 요구중 일부만 정송204 ::: Non Content, 클라이언트 요구를 처리했으나 전송할 데이터가 없음.205 ::: Reset Content206 ::: Partial Conten...
  • 웹지기 09-30 9078 0 0 댓글 0
  • 32 [ Server ][ Linux ] 리눅스 호스팅 서버 관리
  • ■리눅스 호스팅서버 관리************************************************************ 리눅스 호스팅서버 관리************************************************************ 호스팅서비스에 필요한 것들- 리눅스 운영체제- 아파치 웹서버- MySQL 데이터베이스- PHP, Perl 등과 같은 웹프로그래밍언어- 메일서비스 지원을 위한 Sendmail, Qmail, POP, IMAP- Webalizer와 access...
  • 웹지기 09-30 8323 0 0 댓글 0
  • 31 [ Server ][ Linux ] MySQL + Apache + PHP + Zend Optimizer 설치
  • ########################################################### 문서명 : MySQL + Apache + PHP + Zend Optimizer 설치 ## 작성자 : 임희 ## 작성일 : 2003 년 12 월 23 일 (화) 13:00 ## 수정일 : 2004 년 03 월 05 일 (금) 17:00 (수정) ## 수정일 : 2005 년 05 월 21 일 (토) 10:00 (수정) ## 작성서버: KERNEL - 2.4.23 / CPU : P-III 1G /...
  • 웹지기 09-28 10762 0 0 댓글 0
  • 30 [ Server ][ Linux ] 리눅스 파일만들기, 파일옮기기,폴더옮기기, 복사하기, 화면 지우기
  • 리눅스 파일만들기, 파일옮기기, 복사하기, 화면 지우기mv - 이름변경 및 이동을 담당mv 원본파일 대상파일예를들어 test.txt라는 파일이 있다고 치고 나는 /home 디렉토리로 옮기고 싶다면mv test.txt /home로 옮길수 있다.만약 mv test.txt test1.txt라고 한다면 기존의 파일은 사라지고 이름이 변경되게 된다.cp - 파일이나 디렉토리를 다른파일 또는 다른 디렉토리로 복사를 수행한다.cp 원본파일 대상파일cp test.txt /home 이런식으로 사용한다면 test....
  • 웹지기 09-28 10537 0 0 댓글 0
  • 29 [ Server ][ Linux ] httpd.conf 서버 디렉토리 보이게, 안보이게 설정
  • httpd.conf 파일에서 아파치 서버 디렉토리의 폴더및 파일을 보여주거나, 파일 및 폴더를 보여주지않고 오류를 출력할 때 설정 방법. &lt;Directory "D:/AutoSet9/public_html"&gt; #index파일이 없을 때 디렉토리를 감추고 에러를 출력 Options FollowSymLinks #index파일이 없을 때 디렉토리를 보여줌 Options Indexes FollowSymLinks &lt;/Di...
  • 웹지기 11-26 8637 0 0 댓글 0
게시물 검색

회원로그인

접속자집계

오늘
1,750
어제
7,139
최대
33,828
전체
8,415,445

그누보드5
Copyright © funyphp.com. All rights reserved.