Nginx 와 Apache 의 Rewrite 규칙 의 차이 {회전}

4159 단어 rewrite
1. Nginx Rewrite 규칙 관련 명령
    Nginx Rewrite 규칙 과 관련 된 명령 은 if, rewrite, set, return, break 등 이 있 는데 그 중에서 rewrite 가 가장 관건 적 인 명령 이다.간단 한 Nginx Rewrite 규칙 문법 은 다음 과 같 습 니 다.
 
  rewrite ^/b/(.*)\.html /play.php?video=$1 break;

    만약 if 문장 을 더 하면 예 시 는 다음 과 같다.
  
 if (!-f $request_filename)

    {

    rewrite ^/img/(.*)$ /site/$host/images/$1 last;

    }

2. Nginx 와 Apache 의 Rewrite 규칙 인 스 턴 스 비교
    간단 한 Nginx 와 Apache 재 작성 규칙 은 차이 가 크 지 않 아 기본적으로 완전히 호 환 된다.예 를 들 면:
    아파 치 재 작성 규칙:
RewriteRule ^/(mianshi|xianjing)/$ /zl/index.php?name=$1 [L]
RewriteRule ^/ceshi/$ /zl/ceshi.php [L]
RewriteRule ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$2 [L]
RewriteRule ^/pingce([0-9]*)/$ /zl/pingce.php?id=$1 [L]

    Nginx Rewrite 규칙:

rewrite ^/(mianshi|xianjing)/$ /zl/index.php?name=$1 last;
rewrite ^/ceshi/$ /zl/ceshi.php last;
rewrite ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$2 last;
rewrite ^/pingce([0-9]*)/$ /zl/pingce.php?id=$1 last;

    위의 예 에서 알 수 있 듯 이 아파 치 의 Rewrite 규칙 은 Nginx 의 Rewrite 규칙 으로 바 뀌 었 는데 사실은 매우 간단 하 다.
Apache 의 RewriteRule 명령 은 Nginx 의 rewrite 명령 으로, Apache 의 [L] 표 시 는 Nginx 의 last 태그 로, 중간 내용 은 변 하지 않 습 니 다.
    Apache 의 Rewrite 규칙 이 Nginx 의 Rewrite 규칙 으로 바 뀌 면 'nginx - t' 명령 으로 nginx. conf 설정 파일 에 문법 오류 가 있 는 지 확인 하면 조건 에 따 옴 표를 붙 여 볼 수 있 습 니 다.예 를 들 어 Nginx Rewrite 규칙 은 문법 오 류 를 보고 합 니 다.
   
rewrite  ^/([0-9]{5}).html$ /x.jsp?id=$1  last;

    따옴표 를 붙 이면 정확 하 다.
  
 rewrite  “^/([0-9]{5}).html$” /x.jsp?id=$1  last;

Apache 와 Nginx 의 Rewrite 규칙 은 URL 이 바 뀔 때 미세한 차이 가 있 습 니 다.
아파 치 재 작성 규칙:
 
  RewriteRule  ^/html/tagindex/([a-zA-Z]+)/.*$ /$1/ [R=301,L]

Nginx Rewrite 규칙:
   
rewrite  ^/html/tagindex/([a-zA-Z]+)/.*$ http://$host/$1/  permanent;

상기 예제 에서 우 리 는 Nginx Rewrite 규칙 의 교체 문자열 에 'http: / $host' 가 추가 되 었 음 을 알 게 되 었 습 니 다. 이것 은 Nginx 에서 요구 한 것 입 니 다.
   
또한 Apache 와 Nginx 의 Rewrite 규칙 은 변수 이름 에 있어 서도 차이 가 있 습 니 다. 예 를 들 어:
아파 치 재 작성 규칙:
RewriteRule  ^/user/login/$ /user/login.php?login=1&forward=http://%{HTTP_HOST}  [L]

   
Nginx Rewrite 규칙:
rewrite  ^/user/login/$ /user/login.php?login=1&forward=http://$host   last;

Apache 는 Nginx Rewrite 규칙 의 일부 기능 과 같 거나 유사 한 명령, 대응 관 계 를 표시 합 니 다.
   
Apache 의 RewriteCond 명령 은 Nginx 의 if 명령 에 대응 합 니 다.
Apache 의 RewriteRule 명령 은 Nginx 의 rewrite 명령 에 대응 합 니 다.
Apache 의 [R] 태그 가 Nginx 에 대응 하 는 redirect 태그;
Apache 의 [P] 태그 가 Nginx 에 대응 하 는 last 태그;
Apache 의 [R, L] 태그 가 Nginx 에 대응 하 는 redirect 태그;
Apache 의 [P, L] 은 Nginx 에 대한 last 표 시 를 표시 합 니 다.
Apache 의 [PT, L] 표 시 는 Nginx 의 last 표시 입 니 다.
지정 한 도 메 인 이름 이 이 사이트 에 접근 할 수 있 도록 합 니 다. 다른 도 메 인 이름 은 일률적으로 이동 합 니 다.http://www.aaa.com:
    아파 치 재 작성 규칙:
RewriteCond %{HTTP_HOST}    ^(.*?)\.domain\.com$
RewriteCond %{HTTP_HOST}    !^qita\.domain\.com$
RewriteCond %{DOCUMENT_ROOT}/market/%1/index.htm -f
RewriteRule ^/wu/$ /market/%1/index.htm [L]

   
Nginx 의 if 명령 은 끼 워 넣 기 를 지원 하지 않 고 AND, OR 등 여러 조건 이 일치 하 는 것 도 지원 하지 않 습 니 다. 아파 치 의 RewriteCond 보다 귀 찮 지만 다음 페이지 의 Nginx 설정 쓰기 방법 을 통 해 이 예제 를 실현 할 수 있 습 니 다.
    Nginx Rewrite 규칙:
 
  if ($host ~* ^(.*?)\.domain\.com$)
    {
    set $var_wupin_city $1;
    set $var_wupin ‘1′;
    }
    if ($host ~* ^qita\.domain\.com$)
    {
    set $var_wupin ‘0′;
    }
    if (!-f $document_root/market/$var_wupin_city/index.htm)
    {
    set $var_wupin ‘0′;
    }
    if ($var_wupin ~ ‘1′)
    {
    rewrite ^/wu/$ /market/$var_wupin_city/index.htm last;
    }

좋은 웹페이지 즐겨찾기