아파 치 Rewrite 규칙 바 꾸 기 흔 한 설정

1. Rewrite 규칙 소개:  Rewirte 의 주요 기능 은 URL 의 점프 를 실현 하 는 것 입 니 다. 정규 표현 식 은 Perl 언어 를 기반 으로 합 니 다.서버 급 (httpd. conf) 과 디 렉 터 리 급 (htaccess) 두 가지 방식 을 기반 으로 할 수 있 습 니 다.rewrite 모듈 을 사용 하려 면 rewrite 모듈 을 설치 하거나 불 러 와 야 합 니 다.방법 은 두 가지 가 있 는데 하 나 는 apache 를 컴 파일 할 때 rewrite 모듈 을 직접 설치 하 는 것 이다. 다른 하 나 는 apache 를 컴 파일 할 때 DSO 모드 로 apache 를 설치 한 다음 에 소스 코드 와 apxs 를 이용 하여 rewrite 모듈 을 설치 하 는 것 이다.  서버 급 (httpd. conf) 을 기반 으로 두 가지 방법 이 있 습 니 다. 하 나 는 httpd. conf 의 전역 에서 RewriteEngine on 을 직접 이용 하여 rewrite 기능 을 여 는 것 입 니 다.다른 하 나 는 부분 적 으로 RewriteEngine on 을 이용 하여 rewrite 기능 을 켜 는 것 이다. 다음은 예 를 들 어 설명 할 것 이다. 주의해 야 할 것 은 모든 virtualhost 에서 RewriteEngine on 으로 rewrite 기능 을 켜 야 한 다 는 것 이다.그렇지 않 으 면 virtualhost 에 RewriteEngine on 이 없 는 규칙 도 적용 되 지 않 습 니 다.  디 렉 터 리 급 (. htaccess) 을 기반 으로 이 디 렉 터 리 의 FollowSymLinks 속성 을 열 어야 하 며. htaccess 에서 RewriteEngine on 을 설명 해 야 합 니 다.
2. 예 를 들 어 설명 한다.  예 1. 다음은 가상 호스트 에서 정 의 된 규칙 입 니 다.클 라 이언 트 가 요청 한 호스트 접 두 사 를 www. alibaba. cn 과 70.40.213.183 이 아 닌 호스트 접두사 로 옮 기 는 기능 입 니 다.http://www.alibaba.com같은 내용 의 웹 페이지 에 여러 개의 도 메 인 이름 이 있 는 것 을 피 합 니 다. 예 를 들 어http://alibaba.com。
쓰다
NameVirtualHost 70.40.213.183:80
ServerAdmin duanxf@ alibaba.com
DocumentRoot "/web"
ServerName alibaba.com 
RewriteEngine on \ # rewirte 기능 열기
RewriteCond %{HTTP_HOST} \!^www. alibaba. com \ [NC \] \ # 클 라 이언 트 가 요청 한 호스트 의 접 두 사 는 www. alibaba. com 이 아 닙 니 다. 그 중에서 \ [NC \] 는 대소 문 자 를 무시 한 다 는 뜻 입 니 다.
RewriteCond %{HTTP_HOST}\!^70.40.213.183 \ \ [NC \] \ # 클 라 이언 트 가 요청 한 호스트 의 접 두 사 는 70.40.213.183 이 아 닙 니 다. 그 중에서 \ [NC \] 는 대소 문 자 를 무시 한 다 는 뜻 입 니 다.
RewriteCond %{HTTP_HOST} \!^$ #클 라 이언 트 가 요청 한 호스트 의 접두사 가 비어 있 지 않 음 을 설명 합 니 다.
RewriteRule \^(.*) http://www.alibaba.com/ [L] \ # 클 라 이언 트 가 요청 한 호스트 의 접두사 가 위 조건 에 맞 으 면 바로 이동 한 다 는 뜻 입 니 다.http://www.alibaba.com/, [L] 은 재 작성 작업 을 즉시 중단 하고 다른 재 작성 규칙 을 적용 하지 않 는 다 는 것 을 의미한다.이 곳 의. \ * 은 모든 URL 에 줄 바 꿈 문자 가 포함 되 어 있 지 않 음 을 말 합 니 다. () 괄호 의 기능 은 모든 문 자 를 표시 하여 뒤의 응용 에 편리 하도록 하 는 것 입 니 다. 바로 앞의 (. *) 문 자 를 참조 하 는 것 입 니 다.
 
3.Apache mod_rewrite 규칙 재 작성 표지 일람  1) R [= code] (force redirect) 외부 리 셋 강제
대체 문자열 에 강제로 추가 하기http://thishost\ [: thisport \] / 접 두 사 를 외부 URL 로 바 꿉 니 다. code 가 지정 되 지 않 으 면 결 성 된 302 HTTP 상태 코드 를 사용 합 니 다.
2) F (force URL to be forbidden) 에서 URL 을 사용 하지 않 고 403 HTTP 상태 코드 를 되 돌려 줍 니 다.
3) G (force URL to be gone) 는 URL 을 GONE 로 강제 하고 410 HTTP 상태 코드 를 되 돌려 줍 니 다.
4) P (force proxy) 는 프 록 시 리 트 윗 을 강제로 사용 합 니 다.
5) L (last rule) 은 현재 규칙 이 마지막 규칙 임 을 나타 내 고 분석 후 규칙 의 재 작성 을 중단 합 니 다.
6) N (next round) 은 첫 번 째 규칙 부터 재 작성 과정 을 다시 실행 합 니 다.
7) C (chained with next rule) 는 다음 규칙 과 연 결 됩 니 다.  규칙 이 일치 하면 정상적으로 처리 합 니 다. 이 플래그 가 잘못 되 었 습 니 다. 일치 하지 않 으 면 아래 의 모든 관련 규칙 을 건 너 뜁 니 다.  8) T = MIME 타 입 (force MIME type) 강제 MIME 타 입
9) NS (used only if no internal sub - request) 는 내부 하위 요청 이 아 닌 경우 에 만 사 용 됩 니 다.
10) NC (no case) 대소 문자 구분 없 음
11) QSA (query string append) 추가 요청 문자열
12) NE (no URI escaping of output) 에서 전의 특수 문 자 를 출력 하지 않 음
예 를 들 어 RewriteRule / foo / (. *) / bar? arg = P1% 3d $1 [R, NE] 은 / foo / zoo 를 / bar? arg = P1 = zoo 로 정확하게 변환 할 수 있 습 니 다.
13) PT (pass through to next handler) 를 다음 처리 에 전달 합 니 다.
예 를 들 면:
RewriteRule ^ / abc (. *) / def $1 [PT] \ # 는 / def 규칙 처리 에 맡 깁 니 다.
Alias /def /ghi
14) S = num (skip next rule (s) num 규칙 건 너 뛰 기
15) E = VAR: VAL (set environment variable) 환경 변수 설정 
URL 재 설정  예 1:
동시에 다음 두 가지 요구 에 도달 합 니 다.
1. 사용http://www.alibaba.com/home.html 방문 하 러 오다http://www.alibaba.com/home/
2. 사용http://powercctv.alibaba.com 방문 하 러 오다http://www.aliaba.com/user.html?username=powercctv 기능
쓰다
RewriteEngine On
RewriteCond %{HTTP_HOST}
^www.alibaba.com
RewriteCond %{REQUEST_URI} !^home.html$
RewriteCond %{REQUEST_URI}.html$
RewriteRule (.*).html$ [http://www.alibaba.com/$1/] [R]
RewriteCond %{HTTP_HOST} !^www.alibaba.com
RewriteRule ^(.+) %{HTTP_HOST}[C]
RewriteRule ^([^.]+).aliaba.com [http://www.alibaba.com/user.html?username=$1]
 
예 2:
사칭 문제.
만약: 우리 의 url 에 사칭 이 있다 면, 이것 은 비교적 고 통 스 러 울 것 이다.일반적인 url 점프 는 전체 일치 가 짝 퉁 에 문제 가 있 을 수 있 습 니 다.우리 url 은 가짜 로 시작 하기 때 문 입 니 다.이 럴 때 는 rewritecond 로 매 칭 해 야 합 니 다.
쓰다
RewriteCond %{QUERY_STRING} ^action=mcweb\:(.*)
RewriteRule \^/mcweb/contact.htm(.*)$ ${message_alibaba_com}/msgsend/contact.htm?action=%1 [L,R,NE]
 Apache 의 점프 설명 을 추가 하지 않 으 면 문자열 뒤에 있 는 인 자 를 모두 새 점프 URL 에 추가 합 니 다.예 를 들 어 위 에서 mcweb / contact. htm 로 이동 하 는 모든 링크 물음표 뒤의 매개 변수 와RewriteCond %{QUERY_STRING} ^action=mcweb\:-( .*)
쓰다
RewriteCond %{QUERY_STRING} ^action=mcweb\:-( .*)
 일치 합 니 다. 일치 하 는 것 을 발견 하면 message. alibaba. com / msgssend / contact. htm? action = 의 뒤쪽% 1 이 (가) 일치 하 는 다음 문자열 입 니 다.여러 개 있 으 면 몇 개 (. *)% n 을 더 하면 됩 니 다. Apache 의 rewrite 이동 과 우선 순위 가 있 습 니 다. ^ / mcweb / contact. htm (. *) $mcweb 를 포함 한 모든 방문 contact. htm 을 / msgssend / contact. htm 로 옮 기 고 싶 습 니 다.  동시에 모든 action = mcweb: 이러한 url 도 모두 이동 합 니 다.
쓰다
message. alibaba. com / msgssend / contact. htm? action = 이 url 은 이 설정 뒤에 줄 을 추가 해 야 합 니 다.
RewriteRule ^/mcweb/contact.htm ${message_alibaba_com}/msgsend/contact.htm [L,R,NE]
 만약 우리 가 일치 할 때 짝 퉁 만 일치 해 야 한다 면: 그것 은 비교적 간단 하 다.
쓰다
RewriteRule ^wiki/(.*:.*) wiki/index.php?title=$1 [L]

좋은 웹페이지 즐겨찾기