Nginx 와 Apache 의 Rewrite 규칙 의 차이 {회전}
4159 단어 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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rewrite core modelexample: we will rewrite Mage_Newsletter_Model_Subscriber in order to disable send success subscriber and send unsubscri...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.