09 nginx Rewrite (재 작성) 상세 분석

1676 단어 rewrite
 :Rewrite(  )    

rewrite 다시 쓰기
 
재 작성 에 사용 할 명령 어
if  (조건) {}  조건 을 설정 하고 다시 쓰기
set \ # 변수 설정
return \ # 상태 코드 되 돌리 기
break \ # 점프 rewrite
rewrite \ # 다시 쓰기
 
 
If  문법 서식
If 공백 (조건) {
    다시 쓰기 모드
}
 
조건 은 또 어떻게 씁 니까?
답: 3 가지 표기 법
1: "=" 로 똑 같이 판단 하여 문자열 비교 에 사용 합 니 다.
2: "~" 정규 로 일치 합 니 다. (여기 정규 대소 문자 구분)
   ~* 대소 문자 구분 없 는 정규
3: - f - d - e 는 파일 인지, 디 렉 터 리 인지, 존재 하 는 지 판단 합 니 다.
 
예:
 
 if  ($remote_addr = 192.168.1.100) {
       return 403;
}
 
 
 if ($http_user_agent ~ MSIE) {
      rewrite ^.*$ /ie.htm;
       break; \ # (break 하지 않 으 면 순환 하여 방향 을 바 꿉 니 다)
 }
 
 if (!-e $document_root$fastcgi_script_name) {
      rewrite ^.*$ /404.html break;
  }
 주, 여기에 break 를 더 해 야 합 니 다.
xx. com / dsafsd. html 이 페이지 가 존재 하지 않 는 것 을 예 로 들 면,
로그 에 표 시 된 접근 경 로 를 관찰 합 니 다. GET / dsafsd. html HTTP / 1.1 입 니 다.
알림: 서버 내부 의 rewrite 와 302 점프 가 다 릅 니 다.
건 너 뛰 면 URL 이 바 뀌 고 http 요청 404. html 로 바 뀌 었 으 며 내부 rewrite 는 문맥 이 바 뀌 지 않 았 습 니 다.
즉, fastcgi script name 은 여전히 dsafsd. html 이기 때문에 순환 적 으로 방향 을 바 꿉 니 다.
set 는 변 수 를 설정 하 는 데 사 용 됩 니 다. 여러 조건 으로 판단 할 때 표지 용 으로 사용 할 수 있 습 니 다.
apache 의 rewrite condition 효과 달성
 
다음 과 같 습 니 다. IE 를 판단 하고 다시 쓰 며 break 를 사용 하지 않 습 니 다. 우 리 는 set 변수 로 목적 을 달성 합 니 다.
if ($http_user_agent ~* msie) {
    set $isie 1;
 }
 
 if ($fastcgi_script_name = ie.html) {
    set $isie 0;
 }
 
if ($isie 1) {
     rewrite ^.*$ ie.html;
}
 

좋은 웹페이지 즐겨찾기