mod_rewrite 실전

재작성 모듈이란 무엇입니까?

mod_rewrite는 Apache 모듈 중 하나로 설정된 규칙에 따라 서버에 요청한 도메인을 포함하는 URL에 따라 지정된 URL, 파일 또는 기타 페이지를 표시할 수 있는 모듈입니다.

rewrite 모듈을 사용하여 복잡한 URL을 간결하고 간결하게 표현할 수 있으며 보안도 보장됩니다.

당신은 할 수 있습니다.

강력한 기능을 가지고 있지만 조작이 어렵기 때문에 사용하기가 어렵습니다.

모두. 이 가이드에서는 Rewrite 모듈을 설치하고 사용하는 방법에 대한 몇 가지 지침을 작성했습니다.

.

.

mod_rewrite 규칙

.

RewriteEngine: mod_rewrite 사용 여부(On/Off)

RewriteBase: 기본 경로 설정

RewriteCond: 문자열의 패턴 조건 비교

RewriteRule: 실제로 대체되는 조건

플래그 유형:

금지|F – 403 오류로 리디렉션

예) RewriteRule ^/test /home/blog/html/test.php (F)

.

사라|지 – 410 오류로 리디렉션

.

프록시 요청|P – 프록시 요청으로 전송

.

마지막|L – 뒤에 규칙을 적용하지 않고 종료

예) RewriteRule ^/$ (엘)

재작성 규칙 ^$ (엘)

.

신규|N – 새로운 규칙을 시작합니다

.

리디렉션|R – 무조건 전달

.

체크 안함 – 대문자/소문자는 고려하지 않습니다.

.

QSA 결과에 Cond의 내용을 추가합니다.

.

또는 – 또는

.

예) RewriteRule ^((^.)+).example.com(.*) /home/$1/public_html$2

이 규칙은 일반적으로 사용자의 홈 도메인이 보조 도메인으로 자동 설정될 때 사용됩니다.

예: http://user_id. example.com/hello.html에서 요청을 받은 경우

/home/user_id/public_html/hello.html로 리디렉션합니다.

.

훈련

.

1. 포스 www

서버 관리자 [email protected]
문서 루트 /www/src
서버 이름 www.*.net
서버 별칭 *.net www.*.com *com www.*.co.kr *.co.kr www.*.kr *.kr
RewriteEngine 켜기
RewriteCond %{HTTP_HOST} !
^www (NC)
RewriteCond %{HTTP_HOST} !
^$
RewriteRule ^/(.*) http://www.%{HTTP_HOST}/$1 (L,R)
서버 관리자 [email protected]
문서 루트 /www/src
서버 이름 www.*.net
서버 별칭 *.net www.*.com *com www.*.co.kr *.co.kr www.*.kr *.kr
RewriteEngine 켜기
RewriteRule ^/act/((a-zA-Z0-9)+)/((a-zA-Z0-9)+)$ /구성원/?var1=$1&var2=$2 (R,L)

.

.

3. 특정 매개변수 값으로 입력 시 리디렉션

문서 루트 /home/www/public_html
서버 이름 www.domain.co.kr
서버 별칭 domain.co.kr
RewriteEngine 켜기
RewriteCond %{QUERY_STRING} ^(.*)mode=test$
RewriteRule ^/(.*) http://www.naver.com%{요청_URI} (패, 우)

모드 값이 테스트이면 네이버로 전송됩니다.

(R) 주소 표시줄을 URL로 변경합니다.

%{REQUEST_URI} : 호스트 부분 없이 디렉터리 부분에서 매개변수까지를 의미합니다.

전) http://www.sample.co.kr/abc/def.php?param=test

%{REQUEST_URI} 섹션은 “/abc/def.php?param=테스트” 나는 갈 것이다

.

참조) http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

.

4. 인덱스 교체

서버 관리자 [email protected]
문서 루트 /www/src
서버 이름 www.*.net
서버 별칭 *.net www.*.com *com www.*.co.kr *.co.kr www.*.kr *.kr
RewriteEngine 켜기
RewriteCond %{REQUEST_URI} !
^/index\.php
RewriteRule ^/(.*)/idx.php (L)

.

* RewriteRule 작성 및 선언 방법

.

RewriteRule ^/sample/(.*)$ /shop/sample/$1 (L)

의 경우,

http://domainname/example/에 접속하면

http://domainname/shop/muster/ 주소 처리 및 표시,

브라우저에서 주소는 http://domainname/example/로 표시됩니다.

.

http://domainname/example/test/test.php에 접속하면

주소는 처리되어 http://domain name/shop/sample/test/test.php로 표시됩니다.

브라우저에서 주소는 http://domainname/example/test/test.php로 표시됩니다.

.

(L)은 정의된 마지막 줄을 의미합니다.

이 줄 뒤의 RewriteRule은 무시됩니다.

가장 마지막 줄에 작성하십시오.

아무것도 쓰지 않아도 괜찮습니다.

.

(R) 리디렉션을 수행합니다.

.

RewriteRule ^/sample/(.*)$ /shop/sample/$1 (L,R)

의 경우,

http://domainname/example/에 접속하면

http://domainname/shop/muster/ 주소 처리 및 표시,

브라우저는 주소를 http://domainname/shop/sample/로 표시합니다.

.

http://domainname/example/test/test.php에 접속하면

주소는 처리되어 http://domain name/shop/sample/test/test.php로 표시됩니다.

브라우저는 주소를 http://domainname/shop/sample/test/test.php로 표시합니다.

.

RewriteRule ^/blog/view/((0-9)+)/?$ /blog/view/index.php?id=$1

의 경우,

http://domainname/blog/view/1234/에 접속하면

http://domain name/blog/view/index.php?id=1234 및 보기

브라우저는 주소를 http://domainname/blog/view/1234/로 표시합니다.

“/”???”의 이유는? yahoo와 같은 검색 엔진은 URL 끝에 슬래시가 있는 URL을 색인에서 삭제하여 URL 끝에 슬래시로 액세스할 수 있는지 여부를 등록합니다.

하다

.

RewriteRule ^/abc/((0-9,az,AZ)+)/((0-9,-)+)/?$ /abc/test.php?id=$1&date=$2

의 경우,

http://domainname/abc/suzuki/2006-01-01/에 접속하면

http://domainname/abc/test.php?id=suzuki&date=2006-01-01로 표시됩니다.

브라우저는 주소를 http://domainname/abc/suzuki/2006-01-01/로 표시합니다.

.

* 샘플 RewriteRule

.

서버 이름 www.example.com

문서 루트 /테스트/htdocs

RewriteEngine 켜기

재작성 규칙 ^/샘플/(.*)$ /가게/샘플/$1

재작성 규칙 ^/블로그/뷰/((0-9)+)/?$ /블로그/뷰/index.php?id=$1

재작성 규칙 ^/abc/((0-9,az,AZ)+)/((0-9,-)+)/?$ /abc/test.php?id=$1&date=$2 (L)

옵션에는 ExecCGI MultiView가 포함되어 있습니다.

AllowOverrideAll

명령 허용, 거부

모든 사람이 허용

.

================================================== =====================

httpd.conf 파일, httpd-vhosts.conf 또는 루트 디렉토리의 .htaccess 파일

RewriteEngine 켜기

추가하면 재작성 엔진을 사용할 수 있습니다.

.

즉, 적용 할 수있는 세 곳이 있습니다.

1. 디렉토리에 쓰기 httpd.conf에서

2. extra/httpd-vhosts.conf 파일의 각 가상 호스트 모든 디렉토리에서 사용 가능

3. 각 디렉토리의 .htaccess 파일에서 사용 가능

vi /usr/local/apache/htdocs/.htaccess 또는 vi /home/webadmin/pubilc_html/.htaccess

에게

RewriteEngine 켜기 넣어야 가능하다

.

다음과 같은 정규식을 사용하여 URI를 변경할 수 있습니다.

재작성 규칙 ^오래된\.html$ new.html

.

위의 규칙은 “old.html” 요청을 (투명하게) “new.html” 요청으로 변환하여 처리합니다.

new.html로 나타나게 하려면 (R)을 플래그로 사용하십시오.

RewriteRule ^old\.html$ new.html(R)

.

다음 규칙은 정적 URI를 동적 URI로 변경하고 처리합니다.

정규식을 사용하여 여러 요청의 변환을 단순화할 수 있습니다.

RewriteRule ^products/((0-9)(0-9))/$ productinfo.php?prodID=$1

URL이 products/12/ 또는 products/90/인 경우 위 규칙이 적용됩니다.

내부적으로 productinfo.php?prodID=12 또는 productinfo.php?prodID=90

변경 및 처리(0-9)는 0에서 9까지의 난수를 의미합니다.

(az)는 소문자 a~z, (AZ)는 대문자 A~Z, (a-zA-Z)는 영문 한자를 의미합니다.

.

()로 묶인 부분을 역참조라고 하며 패턴에서 변수처럼 형변환을 하게 됩니다.

used 역참조 순서로 $1, $2의 형태로 사용됩니다.

위의 예에서 백링크가 있고 $1 부분이 교체되었습니다.

.

단, 상품/12 등의 문의는 처리할 수 없습니다.

‘/’가 없기 때문에

많은 가능성이 있지만 다음과 같은 규칙을 작성할 수 있습니다.

RewriteRule ^products/((0-9)(0-9))$ products/$1/ (R) <-- 플래그와 함께 규칙 재적용

RewriteRule ^products/((0-9)(0-9))/$ productinfo.php?prodID=$1

.

.

htaccess.

.htaccess(HyperTesxt Access)는 Apache 웹 서버의 디렉토리 수준을 설정하는 기본 파일입니다.

보지마. .htaccess는 특정 디렉토리에 상주하고 모든 하위 디렉토리를 포함하여 해당 디렉토리에 영향을 미치며 해당 파일이 있는 특정 폴더에 사용자 정의 요청 기능을 적용합니다.

파일명이 . 시작되면 Unix 운영 체제에 숨겨진 파일로 저장됩니다.

.

vi /도메인별 디렉터리 설정/.htaccess

문서 루트에 .htaccess 파일을 만들고 다음 내용을 추가합니다.

RewriteEngine 켜기

RewriteCond %{REQUEST_FILENAME} !
-f

RewriteCond %{REQUEST_FILENAME} !
-d

재작성 규칙 ^(.*)$ http://linuxkill.xyz/wordpress/test.php/$1

.

위와 같이 설정하면

.

linuxkill.xyz/ttt 이렇게 도메인을 입력하면

도메인에 linuxkill.xyz/wordpress/test.php/ttt로 표시됩니다.

linuxkill.xyz/wordpress/test.php에 연결됩니다.

.

RewriteCond 지시어는 RewriteRule과 함께 사용되는 규칙으로, RewriteCond 이후의 RewriteRule은 RewriteRule이 실행되기 위해 RewriteCond에 설정된 패턴과 일치해야 합니다.

.

-d : 디렉토리를 의미합니다.

TestString이 디렉토리를 가리키거나 디렉토리를 포함할 때 처리됩니다.

-f : 파일을 의미합니다.

TestString이 파일을 참조하거나 포함할 때 처리됩니다.

.

vi /도메인별 디렉터리 설정/.htaccess

RewriteEngine 켜기

RewriteCond %{HTTP_HOST} ^linuxkill\.xyz/wordpress$ (NC,OR)

RewriteCond %{HTTP_HOST} ^linuxkill\.xyz/((0-9)+) (NC)

재작성 규칙 ^(.*)$ http://ttt.linuxkill.xyz/$1 (R=301,엘)

.

위의 (NC)는 대문자와 소문자를 의미합니다.

(OR)은 프로그래밍에서 or와 유사합니다.

(R=301)은 검색 엔진이 강제로 재색인화됨을 의미합니다.

(즉, ttt를 추가하면 다시 나타납니다.

)

linuxkill.xyz에 연결하면 ttt가 자동으로 추가됩니다.

.

vi /도메인별 디렉터리 설정/.htaccess

RewriteEngine 켜기

RewriteCond %{REMOTE_HOST} ^linuxkill.xyz.* (OR)

재작성 규칙 ^(.*)$ http://www.naver.com/

.

linuxkill.xyz 도메인 접속 시 www.naver.com으로 리다이렉트하는 역할을 합니다.

Linuxkill.xyz.*는 linuxkill.xyz/ 이후의 문자 또는 숫자를 의미하며 naver.com으로 전달됩니다.

.

정규 표현식의 기본 형식

.

RewriteCond TestString CondPattern(조건 = 조건)

RewriteRule 패턴 교체(플래그)