Nginx 노트 의 Rewrite 규칙
Rewrite 규칙 관련 명령
break 명령
break 의 역할 은 현재 규칙 집합 을 완성 하고 rewrite 명령 을 처리 하지 않 습 니 다.
if ($slow)
{
limit_rate 10k;
break;
}
if 명령
if 조건 판단, 조건 이 일치 하 는 지 판단 하고 코드 세그먼트 내 명령 을 실행 합 니 다.Nginx 내 if 명령 은 내장 되 어 있 지 않 으 며, 여러 조건 으로 처리 되 는 것 도 지원 되 지 않 습 니 다 (& & 또는 | |)
if 명령 은 Rewrite 규칙 에서 많이 사용 되 는 명령 으로 많은 정 보 를 if 의 조건 으로 판단 할 수 있 습 니 다.크게 다음 과 같은 몇 가지 로 나 뉜 다.
예 를 들 면:
if ($http_user_agent ~ MSIE)
{
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;] +)(?:;|$)")
{
set $id $1;
}
if ($request_method = POST)
{
return 405;
}
if (!-f $request_filename)
{
break;
proxy_pass http://127.0.0.1;
}
if ($slow)
{
limit_rate 10k;
}
if ($invalid_referer)
{
return 403;
}
if ($args ^~ post=140)
{
rewrite ^ http://example.com/ permanent;
}
return 명령
return 명령 은 규칙 의 실행 을 끝내 고 상태 코드 정 보 를 클 라 이언 트 에 게 되 돌려 줍 니 다.자주 사용 할 수 있 는 상태 코드 는 다음 과 같 습 니 다.
rewrite (핵심)
rewrite 규칙 의 핵심 명령 으로서 rewrite 명령 은 표현 식 에 따라 URI 를 바 꾸 거나 문자열 을 수정 합 니 다.설정 파일 에 있 는 순서대로 명령 을 실행 합 니 다.
표현 식 을 다시 쓰 는 것 이 상대 경로 에 유효 합 니 다.호스트 이름 과 일치 하려 면 if 명령 을 설정 해 야 합 니 다.
rewrite 문법:
rewrite regex replacement flag
rewrite 명령 이 지원 하 는 flag:last 는 이 rewrite 규칙 이 실 행 된 후에 다시 블록 내 에서 요청 을 합 니 다. break 는 이 규칙 이 일치 한 후에 매 칭 을 종료 합 니 다. 따라서 last 는 어떤 경우 에 잘못 사용 하면 사 순환 을 초래 할 수 있 습 니 다.일반적으로 루트 location 이나 server 탭 에 rewrite 규칙 을 직접 작성 합 니 다. last 를 사용 하 는 것 을 추천 합 니 다.비 루트 location 에서 break 를 사용 합 니 다.예 를 들 면:
# location / {...} , , location
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$1.mp3 last;
return 403;
location 、download/ {
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$1.mp3 break;
return 403;
}
만약 교 체 된 URI 에 인자 (예: / app / test. php? id = 5) 가 포함 되 어 있다 면, 기본 매개 변 수 는 자동 으로 교 체 된 문자열 에 추 가 됩 니 다. 우 리 는 교 체 된 문자열 의 끝 에 추가 할 수 있 습 니까?이 문 제 를 해결 하 겠 습 니 다.
rewrite ^/user/(.*)$ /show?user=$1? last;
# ?
# rewrite ^/test(.*)$ http://www.aaa.com/home permanent;
# http://www.aaa.com/test?id=5, http://www.aaa.com/home?id=5
# ?
# rewrite ^/test(.*)$ http://www.aaa.com/home? permanent;
# http://www.aaa.com/test?id=5, http://www.aaa.com/home
set 명령
set 명령 은 변 수 를 정의 하 는 데 사용 되 며 변 수 를 할당 할 수 있 습 니 다.if 에 맞 추 면 여러 조건 을 실현 할 수 있 습 니 다.예컨대
if ($host ~* ^(.*?)\.aaa\.com$)
{
set $var_test '1';
}
if ($host ~* ^localhost)
{
set $var_test '1';
}
if ($var_test !~ '1')
{
rewrite ^/(.*)$ http://www.aaa.com/ redirect;
}
Nginx 와 아파 치 의 Rewrite 규칙 인 스 턴 스 비교
일반적으로 간단 한 nginx 와 apache 의 rewrite 규칙 은 차이 가 크 지 않 고 작은 복구 만 이 호 환 을 실현 할 수 있 습 니 다.
아파 치 재 작성 규칙:
RewriteRule ^/(.*)$ http://www.aaa.com/$1 [L]
Nginx Rewrite 규칙:
rewrite ^/(.*)$ http://www.aaa.com/$1 last;
양자 의 미세한 차이
# nginx
# nginx URL :http://$host
rewrite ^/(.*)$ http://www.aaa.com/$1/ permanent;
# apache
RewriteRule ^/(.*)$ /$1/ [R=301,L]
# apache
${HTTP_HOST}
# nginx
$host
둘 의 유사 명령
apache
nginx
RewriteCond
if
RewriteRule
rewrite
[R]
redirect
[P]
last
[R,L]
redirect
[P,L]
last
[PT,L]
last
본 고 는 책 속 의 어떤 장 에 대한 지식 을 정리 하여 잊 혀 지지 않도록 하 는 독서 노트 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.