아파 치 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. 예 를 들 어 설명 한다.
다음은 가상 호스트 에서 정 의 된 규칙 입 니 다.클 라 이언 트 가 요청 한 호스트 접 두 사 를 www. colorme. com 과 203.81.23.202 가 아 닌 호스트 접두사 로 옮 기 는 기능 입 니 다.http://www.colorme.com.cn사용자 가 주소 표시 줄 에 쓰 지 않도록 합 니 다.http://colorme.com.cn회원 으로 사이트 에 접속 할 수 없습니다.
NameVirtualHost 192.168.100.8:80
ServerAdmin [email protected]
DocumentRoot “/web/webapp”
ServerName www.colorme.com.cn
ServerName colorme.com.cn
RewriteEngine on \ # rewirte 기능 열기
RewriteCond %{HTTP_HOST} !^www. colorme. com. cn [NC] \ # 클 라 이언 트 가 요청 한 호스트 의 접 두 사 는 www. colorme. com. cn 이 아 닙 니 다. [NC] 는 대소 문 자 를 무시 한 다 는 뜻 입 니 다.
RewriteCond %{HTTP_HOST} !^203.81.23.202 [NC] \ # 클 라 이언 트 가 요청 한 호스트 의 접 두 사 는 203.81.23.202 가 아니 라 [NC] 는 대소 문 자 를 무시 한 다 는 뜻 입 니 다.
RewriteCond %{HTTP_HOST} !^$ #클 라 이언 트 가 요청 한 호스트 의 접두사 가 비어 있 지 않 음 을 설명 합 니 다. [NC] 는 대소 문 자 를 무시 한 다 는 뜻 입 니 다.
RewriteRule ^/(.*) http://www.colorme.com.cn/ [L]
\ # 클 라 이언 트 가 요청 한 호스트 의 접두사 가 상기 조건 에 부합 되면 바로 이동 한 다 는 뜻 입 니 다.http://www.colorme.com.cn/, [L] 은 재 작성 작업 을 즉시 중단 하고 다른 재 작성 규칙 을 적용 하지 않 는 다 는 것 을 의미한다.이 곳 의. * 는 모든 URL 에 줄 바 꿈 문자 가 포함 되 어 있 지 않 은 것 을 말 합 니 다. () 괄호 의 기능 은 모든 문 자 를 표시 하여 뒤의 응용 에 편리 하도록 하 는 것 입 니 다. 바로 앞의 (. *) 문 자 를 참조 하 는 것 입 니 다.
예 2. folio. test. com 의 도 메 인 이름 을 입력 할 때 profile. test. com 으로 이동 합 니 다.
listen 8080
NameVirtualHost 10.122.89.106:8080
ServerAdmin [email protected]
DocumentRoot “/usr/local/www/apache22/data1/”
ServerName profile.test.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^folio.test.com [NC]
RewriteRule ^/(.*) http://profile.test.com/ [L]
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 = zed 로 정확하게 변환 할 수 있 습 니 다.
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) 환경 변수 설정
4. Apache rewrite 예 집합
httpd 에서 도 메 인 이름 을 다른 도 메 인 가상 호스트 세계 로 전송 합 니 다. 최근 에 도 메 인 이름 이 바 뀌 었 습 니 다. 새 도 메 인 이름 은 www. wbhw. com 으로 더욱 짧 고 기억 하기 쉽 습 니 다.이 때 는 원래 도 메 인 이름 인 webhosting - World. com 과 포럼 이 있 는 주소 인 webhosting - World. com / forums / 를 새로운 도 메 인 이름 으로 지정 하여 사용자 가 찾 을 수 있 도록 하고 원래 의 포럼 URL 을 404 가 나타 나 지 않도록 해 야 합 니 다. 예 를 들 어 원래 의 도 메 인 이름 입 니 다.http://www.webhosting-world.com/forums/-f60.html새 도 메 인 이름 에서 계속 유효 하도록 합 니 다.클릭 후 전송http://bbs.wbhw.com/-f60.html, apache 의 Mod 를 사용 해 야 합 니 다.rewrite 기능 으로 구현.
다음 리 셋 규칙 을 추가 합 니 다:
RewriteEngine On
# Redirect webhosting-world.com/forums to bbs.wbhw.com
RewriteCond %{REQUEST_URI} ^/forums/
RewriteRule /forums/(.*) http://bbs.wbhw.com/$1 [R=permanent,L]
# Redirect webhosting-world.com to wbhw.com
RewriteCond %{REQUEST_URI} !^/forums/
RewriteRule /(.*) http://www.wbhw.com/$1 [R=permanent,L]
위의 규칙 을 추가 한 후, 안의 모든 내용 은 다음 과 같다.
ServerAlias webhosting-world.com
ServerAdmin [email protected]
DocumentRoot /path/to/webhosting-world/root
ServerName www.webhosting-world.com
RewriteEngine On
# Redirect webhosting-world.com/forums to bbs.wbhw.com
RewriteCond %{REQUEST_URI} ^/forums/
RewriteRule /forums/(.*) http://bbs.wbhw.com/$1 [R=permanent,L]
# Redirect webhosting-world.com to wbhw.com
RewriteCond %{REQUEST_URI} !^/forums/
RewriteRule /(.*) http://www.wbhw.com/$1 [R=permanent,L]
URL 재 설정
예 1:
1.http://www.zzz.com/xxx.php-> http://www.zzz.com/xxx/
2.http://yyy.zzz.com-> http://www.zzz.com/user.php?username=yyy
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.zzz.com
RewriteCond %{REQUEST_URI} !^user\.php$
RewriteCond %{REQUEST_URI} \.php$
RewriteRule (.*)\.php$ http://www.zzz.com/$1/ [R]
RewriteCond %{HTTP_HOST} !^www.zzz.com
RewriteRule ^(.+) %{HTTP_HOST} [C]
RewriteRule ^([^\.]+)\.zzz\.com http://www.zzz.com/user.php?username=$1
예 2:
/type.php?typeid=* –> /type*.html
/type.php?typeid=*&page=* –> /type*page*.html
RewriteRule ^/type([0-9]+).html$ /type.php?typeid=$1 [PT]
RewriteRule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&page=$2 [PT]
5. Apache 의 URL Rewrite 를 사용 하여 다 중 사용자 가상 서버 설정
이 기능 을 실현 하려 면 먼저 DNS 서버 에서 도 메 인 이름 의 범 도 메 인 이름 분석 을 열 어야 합 니 다.예 를 들 어, 나 는 *. semcase. com 과 *. semcase. cn 을 모두 나의 이 Linux Server 에 분석 했다.
그리고 내 아파 치 에서 *. semcase. com 의 가상 호스트 설정 을 살 펴 보 자.
#*.com,*.osall.net
ServerAdmin [email protected]
DocumentRoot /home/www/www.semcase.com
ServerName dns.semcase.com
ServerAlias dns.semcase.com semcase.com semcase.net *.semcase.com *.semcase.net
CustomLog /var/log/httpd/osa/access_log.log” common
ErrorLog /var/log/httpd/osa/error_log.log”
AllowOverride None
Order deny,allow
#AddDefaultCharset GB2312
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.osall\.(com|net)$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.osall\.(com|net)(.*)$
/home/www/www.semcase.com/sylvan$3?un=$1&%{QUERY_STRING} [L]
이 설정 에서 나 는 *. semcase. net 과 *. semcase. com 의 Document Root 를 모두 / home / www / www. semcase. com 으로 설정 했다.
하지만 계속 보 세 요. 설정 보이 시 나 요?여기 URL Rewrite 규칙 을 설 정 했 습 니 다.
RewriteEngine on \ # URL 열기 Rewrite 기능
RewriteCond% {HTTP HOST} ^ [^.] +. osall. (com | net) $\ # 일치 하 는 조건 입 니 다. 사용자 가 입력 한 URL 의 호스트 이름 이 xxxx. semcase. com 이나 xxxx. semcase. cn 과 유사 하 다 면 다음 문장 을 실행 하 십시오.
RewriteRule ^ (. +)% {HTTP HOST} $1 [C] \ # 사용 자 를 완전한 주소 (GET 방식 의 인자 제외) 로 입력 하여 다음 규칙 에 전달 합 니 다. [C] 는 Chain 이 다음 규칙 을 연결 한 다 는 뜻 입 니 다.
RewriteRule ^([^.]+).osall.(com|net)(.*)$ /home/www/dev.semcase.com/sylvan$3?un=$1&%{QUERY_STRING} [L]
\ # 가장 중요 한 것 은 이 문장 입 니 다. 사용자 가 입력 한 URL 주 소 를 증명 식 으로 해석 하고 호스트 이름 의 사용자 이름 정 보 를 un 이라는 매개 변수 로 / home / www / dev. semcase. com 디 렉 터 리 에 있 는 스 크 립 트 를 전달 하 며 사용자 가 입력 한 GET 방식 의 입력 매개 변 수 를 따라 갑 니 다.그리고 이것 이 마지막 규칙 ([L] 규칙) 이 라 고 지적 했다.이 문장에서 가리 키 는 재 작성 후의 주 소 는 서버 의 절대 경 로 를 사용 하고 이것 은 내부 점프 입 니 다.하면, 만약, 만약...http://xxxx이러한 URL 형식 은 외부 점프 라 고 불 린 다.외부 점프 를 사용 하면 탐색 중인 브 라 우 저의 URL 주소 가 새로운 주소 로 바 뀌 고, 내부 점프 를 사용 하면 브 라 우 저의 주소 가 바 뀌 지 않 아 실제 2 급 도 메 인 네 임 가상 서버 처럼 보 입 니 다.
이렇게 설정 하면 Apache 서버 를 다시 시작 하고 테스트 해 보면 큰 성 과 를 거 둘 수 있 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 파일 압축 및 압축 풀기파일 의 간단 한 압축 과 압축 해 제 를 실현 하 였 다.주요 테스트 용 에는 급 하 게 쓸 수 있 는 부분 이 있 으 니 불편 한 점 이 있 으 면 아낌없이 가르쳐 주 십시오. 1. 중국어 문 제 를 해 결 했 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.