Nginx Rewrite규칙 관련 명령
Nginx Rewrite규칙 관련 명령 if, rewrite · set, return, break 등 중 rewrite 가장 중요한 명령.
rewrite 문법
문법: rewrite regex replacement flag
기본: none
범위: server, location, if
This directive changes URI in accordance with the regular expression and the replacement string. Directives are carried out in order of appearance in the configuration file.
이 명령 따라 식 변경하는 URI 또는 변경 문자열.명령 설정 파일에 순서 근거해서 실행.
Be aware that the rewrite regex only matches the relative path instead of the absolute URL. If you want to match the hostname, you should use an if condition, like so:
주의 재작성 표현 에 대해서 만 상대 경로 유효하다.만약 네가 생각하는 것 호스트 이름, 너는 마땅히 사용 이프문.
rewrite 것은 다만 다시 경로 부분의 물건 을 안 수정을 사용자 입력 인자 때문에 여기 if 규칙 안에 니가 할 필요가 없다, 관심 사용자 브라우저 안에 입력 인자, rewrite 후 자동으로 추가, 따라서 우리는 그냥 더하기 하나? 번호 및 뒤에 우리 원하는 일개 매개 변수 ***https=1 됩니다.
nginx 있는 rewrite 규칙 참조:
- ~ 대소문자 구분 일치하는 위해
- ~* 을 안 대소문자 구분 일치
- !~와! ~* 각각 대소문자 구분 안 일치하는 및 안 대소문자 구분 안 필
- -f,! -f 여부를 판단할 수 없는 파일 열기
- -d 와! -d 판단할 수 있는 데 대해 디렉터리
- -e 와! -e 판단할 수 있는 데 대해 파일이나 디렉터리
- -x 와! -x 데 파일 실행 여부 판단
- last 해당 아파치 안에 [L] 태그 / 완성 rewrite, 하하 그건 가장 상용하는
- break 종료 일치, 더 이상 일치 뒤에 규칙
- redirect 복귀 302 임시 전달 주소 표시줄을 후 주소를 이동 보이기
- permanent 복귀 301 영구 전달 주소 표시줄을 후 주소를 이동 보이기
nginx 이하 내부 변수 있다
$args, 요청 중 매개 변수;
$content_length, HTTP요청 정보 안에”Content-Length”;
$content_type, 요청 정보 안에”Content-Type”;
$document_root, 현재 요청 대한 값을 루트 경로 설정;
$document_uri, 과 $uri 같다;
$host, 요청 정보 중 “Host” 만약 요청 중 Host 안 돼, 은 은 설정 서버 이름;
$limit_rate, 연결 속도 제한을 대한;
$request_method, 요청한 방법, 예를 들어 “GET ‘,’ POST” 등;
$remote_addr, 클라이언트 주소;
$remote_port, 클라이언트 포트 번호;
$remote_user, 클라이언트 사용자 이름, 인증 쓰다;
$request_filename, 현재 요청한 파일 경로 명
$request_body_file
$request_uri, 요청한 URI 데리고 조회 문자열;
$query_string, 과 $args 같다;
$scheme, 사용할 프로토콜, 예를 들면 http 또는 https, 예컨대rewrite ^(.+)$ $scheme://example.com$1 redirect;
$server_protocol, 요청한 프로토콜 버전 ‘HTTP/1.0’ 또는”HTTP/1.1″;
$server_addr, 서버 주소, 만약 소용없다 listen 짚다 서버 주소를 사용합니다. 이 변수 는 발기 한 번 으로 취득 시스템 호출 주소 (에 자원의 낭비);
$server_name, 요청 도착했을 서버 이름;
$server_port, 요청 도착했을 서버 포트 번호;
$uri, 요청한 URI 아마 및 초기 값 다르다는 같은 거 쳐 전달.
이 변수 쓸 수 rewrite 규칙 안에 있을 때 쓰는 로그 인쇄
nginx 로그
nginx 로그 관련 명령 주요 두 가지, 한 가지 log_format, 쓸 설정 기록 형식, 또 한 가지 access_log, 로그 파일 저장 데 지정된 경로, 형식 및 캐시 크기, 통속적인 이해 바로 먼저 이걸로 결정한다 log_format 그 어떤 정보 출력 로그 안에, 그리고 써야 한다 zccess_log 정의 가상 호스트 때로 전역 로그 때, 그 정의 log_format 뒤를,
log_format 형식:
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_s ent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
main기 뒤에 정의 로그 개수 좀 가지러 한 명의 main 이름 위해 편리 지금 access_log 명령 중 참조
위 log_format 인쇄 나오는 로그 모양 같다.
111.22.33.44 – – [10/Jan/2001:02:14:14 +0200] “GET / HTTP/1.1” 200 1234 “http://www.fromserver.com/from.htm” “Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)”
대비 기록 형식 및 출력 결과를 발견할 수 있다, 기록 형식 으로 한 쌍의 작은 따옴표 싸라, 여 개 기록 형식 동안 쓸 수 있다 놓고 다른 돼, 마지막 으로 세미콜론 (;) 끝
작은 따옴표 중 따옴표 (‘) 공백 문자, 중괄호 ([) 등 문자 그대로 출력 비교적 긴 문자열 보통 쓰는 따옴표 (‘) 싸라, 보기에 쉽지 더 잘 $변수를 바꾸기 시작 할 실제 값
$remote_user – 표시 없다 값
access_log 명령 예제
access_log /home/example/nginx/logs/access.log main;
/home/example/nginx/logs/access.log로그 출력 표시 nginx 것이다. 이 파일 로그 내용 만세 만약 main 정의
많이 전성 매개 변수 목록
abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2
- if ($host ~* (.*)\.domain\.com) {
- # ~*대소문자를 구분하지 않습니다. 일치,
- # ‘.’ 일치하는 임의의 단일 문자
- #()기 는 () 안에 있는 일치하는 결과를 저장할 변수 중 첫 번째로 일치하는 괄호로 속에 두었다 변수, 두 번째 괄호 중 일치하는 값 넣고 中, 이것에 의해 유추할 수 있다
- #시작 새로운 일치, 할 등 변수 값 바꾸기 위해 새로운 일치하는 값, 여기 값 위해abc
- #결과를 저장할 수 일치 위해서, 마치 아래 돼. 그럼 될 찾을 넣고 새로운 변수 중
- set $sub_name $1;
- #여기 새로운 시작 한 번 일치, 값 된 새 값 2
- #매 번 rewrite 첫 번째 인자 대응 것은 host 뒤에 문자열 여기 표시/sort/2
- #이것도 할 인증, 그리고 만약 두 번째 딱 두 괄호, 처음 세 가지 않으면 값이 얼마입니까?
- #rewrite 첫 번째 인자 마지막 \/? 끝 재니스를 / 해도 안 데리고/
- rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&name=$sub_name&id=$1 last;
- }
검증 문제를 있어:
if ($host ~* (.*)\.domain\.co)
그러니까 안 대소문자 구분 상황에서 $host 중에 혹시 포함 (.*) \.domain\.co 모드 때문에$host=abc.domain.com이것도 일치하는 모드
제외할.com 필요 는 모드 가 $기호, 즉 개정을 위해if ($host ~* (.*)\.domain\.co$)
디렉터리 교환한다
/123456/xxxx -> /xxxx?id=123456
- rewrite ^/(\d+)/(.+)//$2?id=$1 last;
나 혼자 쓰는 그런
rewrite ^/\/(\d+)\/(\w+)\/? /$2?id=$1 last;
‘.’일치하는 임의의 단일 문자,.+ 은 일치 적어도 포함 한 글자 임의 문자열, 주어진 결과 사실 은 첫 단계를 디렉터리 둔 후 디렉터리 뒤에
/123456/abc/def/ rewrite후의 결과 위해/abc/def?id=123456
메모: /123456/abc/def/ 마지막 / 뺏기면 가셨다
예를 들어 사용자가 사용 설정 nginx 아래 ie 브라우저 방문 때 다음으로 넘김 /nginx-ie 목록 아래에서:
- if ($http_user_agent ~ MSIE) {
- # ~ 대소문자 구분 일치
- rewrite ^(.*)$ /nginx-ie/$1 break;
- }
다음은 $http_user_agent 순위 예의 하나이다
“$http_user_agent” “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E)”
위 예는 쓰는 Mozilla 브라우저 방문 있지만 여전히 하위 문자열 포함 MSIE 따라서 위의 rewrite 규칙 반드시 엄격한 쓰면 안 한다if ($http_user_agent ~ ^MSIE), 限定以 MSIE开头更加严格
디렉토리 자동 플러스”/”
- if (-d $request_filename){
- rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
- }
용 ([^/]) 일치하는 마지막 비’/’문자 후에 다시 혼자 강제로 추가합니다’/'( 변수 후 그)
Location 명령
네. 일치하는 URI 위해 데 대해 설정을 URI 바로 문법 중 “/uri/”, 또는 수 문자열에 정규 표현식입니다.하지만 만약 사용할 정규 표현식 않으면 반드시 지정된 접두사.
나는 이해: 만약 URI 포함하기 어느 모드, 뒤에 은 진행 처리.
기초 문법
location [ =|~|~*|^~|@ ] /uri/ { … }
〖=〗 표시 정확하게 일치, 찾으면 즉시 검색 및 즉시 처리 이 요청.
〖~ 〗 대소문자 구분 일치 표시
〖~*〗 대해 안 대소문자 구분 일치
〖^~ 〗 일치하는 것은 단지 문자열 안 조회 정규 표현식.
〖@〗 지정한 한 딴 location, 보통 만 으로 내부 색 요청.
일치하는 과정
우선 대한 문자열 대해 일치 조회 가장 확실한 일치하는 사용될 것이다.그리고 있는 일치하는 정규 표현식 일치 조회 부터 첫 번째 결과가 후 검색 없다면 찾을 문자열을 사용할 정규 표현식, 검색 결과, 만약 문자열 및 정규 다 일치하는 정규, 그렇게 높은 우선 순위.
설정 인스턴스
location = / {
# 쪽 필 것 / 디렉터리 조회.
[ config A ]
}
location / {
# 일치하는 로 / 시작한 조회, 즉 모든 조회 다 일치.
[ config B ]
}
location ^~ /images/ {
# 일치하는 으로 /images/ 시작한 조회, 더 이상 검사 정규 표현식.
[ config C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 일치하는 으로 gif|png, jpg, or jpeg 파일 끝 있지만, 우선 순위 이하로 config C.
[ config D ]
}
금지ht access
- location ~/\.ht {
- #ht한 파일이나 디렉터리, 아무리 ht 어디 한 급 모두 접근 금지)
- deny all;
- }
여러 목록 금지
- location ~ ^/(cron|templates)/ {
- #방문 1 급 디렉토리 이름 cron 또는 templates 위해 디렉터리 금지
- deny all;
- break;
- }
으로 /data 시작하는 파일 금지
수 /data 디렉터리 아래 모든 파일 접근 금지;
- location ~ ^/data {
- deny all;
- }
금지 단일 파일
- location ~ /data/sql/data.sql {
- deny all;
- }
expires
문법: expires [time|epoch|max|off]
기본 값: expires off
범위: http, server, location
할 수 있는 HTTP 응답 제어 명령 중 “Expires”, “Cache-Control ‘1등상 (일으킬 제어 페이지 캐시 역할을).수 time 값 중 사용 플러스 또는 마이너스다.’Expires “1등상 값 현재 시스템 시간 게다가 설정 time 통해 값 올 것이다.
epoch 지정 ‘Expires’ 값을 위해 1 January, 1970, 00:00:01 GMT.
max 지정 ‘Expires’ 값을 위해 31 December 2037 23:59:59 GMT, “Cache-Control”的值为10年.
-1 지정 ‘Expires’ 값을 서버 현재 시간 -1s 위해, 즉 영원히 만료
“Cache-Control”헤더 표 값 by 지정한 시간 결정한다:
음수: Cache-Control: no-cache
양수 또는 제로: Cache-Control: max-age = #, # 지정한 시간 지연 s.다른 부서에는 d (일) h (시간)
“off” 대해 안 수정 ‘Expires “,” Cache-Control’ 값
제어 사진 등 끝나는 시간 을 30일, 이 시간 더 설정할 수 있습니다.구체적인 상황을 봐가며 결정하자
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
log_not_found off; #안 404 not found 오류 로그 기록
expires 30d;
break;
}
제어 일치 /resource/ 또는 /mediatorModule/ 안의 모든 파일 캐시 설정 까지 가장 긴 시간
location ~ /(resource|mediatorModule)/ {
root /opt/demo;
expires max;
}
설정 어느 파일 만료 기간; 여기 위해 150 초, 결코 기록을 접근 로그
- location ^~ /html/scripts/loadhead_1.js {
- access_log off;
- root /opt/lampp/htdocs/web;
- expires 600;
- break;
- }
반 盗链 결코 지난 시간 설정 파일
여기 return 412 위해 사용자 http 상태 부호, 기본값은 403 편리하다 정확한 盗链 청을 찾아내다.
“rewrite ^/ ;”방범 체인 사진 한 장 보이기
“access_log off;”안 기록 접근 로그, 경감하다 압력
“expires 3d”모든 파일 3일 브라우저 캐시
- location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
- valid_referers none blocked *.c1gstudio.com *.c1gstudio.net localhost 208.97.167.194;
- if ($invalid_referer) {
- rewrite ^/ ;
- return 412;
- break;
- }
- access_log off;
- root /opt/lampp/htdocs/web;
- expires 3d;
- break;
- }
설정 GZIP
일반적인 상황에서 압축 후 html, css, js · php, jhtml 등 파일 크기 수 원래 25% 떨어졌다. 즉 원래 한 100k HTML, 압축 후 25k 남았다.이것은 틀림없이 절약할 수 많은 대역폭 수도 낮출 수 서버 부하.
지금 nginx 중 설정 gzip 비교적 간단하다
구체적인 보인다
일반적인 상황에서 그냥 nginx.conf 의 기간 중 가입 http 아래 몇 줄의 설정 수 있다
gzip on;
gzip_min_length 1000;
gzip_buffers 4 8k;
gzip_types text/plain application/x-javascript text/css text/html application/xml;
웹 페이지 수 gzip 검색 도구 통하여 검색 페이지 사용 여부.gzip
단지 가득 허 고정 ip 사이트를 방문할 있으며, 게다가 비밀번호
- root /opt/htdocs/www;
- allow 208.97.167.194;
- allow 222.33.1.2;
- allow 231.152.49.4;
- deny all;
- auth_basic “C1G_ADMIN”;
- auth_basic_user_file htpasswd;
다중 목록 될 다음 파일 전성 파일이 증강 서 효과
/job-123-456-789.html 지향/job/123/456/789.html
- rewrite ^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last;
이 커널의 루트 디렉터리 아래 어느 폴더를 가리키는 2 급 목록
같다/shanghaijob/ 지향 /area/shanghai/
만약 당신 은 last 고쳐졌다 permanent 그렇게 웹 주소 표시줄에 현 은/location/shanghai/
- rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
위 예 어떤 문제는 방문 때 않을 것이다 /shanghai 일치
- rewrite ^/([0-9a-z]+)job$ /area/$1/ last;
- rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
이렇게 /shanghai 접근할 수도 있지만, 페이지 중 상대 링크 사용할 수 없다,
만약./list_1.html 실제 주소는/area/shanghia/list_1.html어떻게 /list_1.html, 전 ~ 접근할 수 없습니다.
그럼 내가 게다가 자동 이동 도 안돼 ~
(-d $request_filename)그것은 어떤 조건은 필수 사실이라고 목록, 때문에 내 rewrite 아니야. 그래서 효과가 없다
- if (-d $request_filename){
- rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
- }
알고 원인을 처리하기 쉽다, 나 수동 갑니다.
- rewrite ^/([0-9a-z]+)job$ /$1job/ permanent;
- rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
파일과 디렉터리 이름 때 전달:
- if (!-e $request_filename) {
- proxy_pass ;
- }
도메인 이름 이동
- server
- {
- listen 80;
- server_name jump.88dgw.com;
- index index.html index.htm index.php;
- root /opt/lampp/htdocs/www;
- rewrite ^/ ;
- access_log off;
- }
많이 도메인 돌리다
- server_name www.7oom.com/ www.divmy.com/;
- index index.html index.htm index.php;
- root /opt/lampp/htdocs;
- if ($host ~ “c1gstudio\.net”) {
- rewrite ^(.*) permanent;
- }
삼단식 도메인 이동
- if ($http_host ~* “^(.*)\.i\.c1gstudio\.com$”) {
- rewrite ^(.*) ;
- break;
- }
도메인 이름 거울 향해
- server
- {
- listen 80;
- server_name mirror.c1gstudio.com;
- index index.html index.htm index.php;
- root /opt/lampp/htdocs/www;
- rewrite ^/(.*) last;
- access_log off;
- }
어떤 키 목록 하다 거울 향해
- location ^~ /zhaopinhui {
- rewrite ^.+ last;
- break;
- }
discuz ucenter home (uchome) rewrite
- rewrite ^/(space|network)-(.+)\.html$ /$1.php?rewrite=$2 last;
- rewrite ^/(space|network)\.html$ /$1.php last;
- rewrite ^/([0-9]+)$ /space.php?uid=$1 last;
discuz 7 rewrite
- rewrite ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $1/archiver/index.php?$2 last;
- rewrite ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3 last;
- rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page\%3D$4&page=$3 last;
- rewrite ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro.php?$2=$3 last;
- rewrite ^(.*)/space-(username|uid)-(.+)\.html$ $1/space.php?$2=$3 last;
- rewrite ^(.*)/tag-(.+)\.html$ $1/tag.php?name=$2 last;
discuz! 모 땅덩이가 따로 설정 도메인 주세요.
- server_name bbs.c1gstudio.com news.c1gstudio.com;
- location = / {
- if ($http_host ~ news\.divmy.com$) {
- rewrite ^.+ last;
- break;
- }
- }
discuz ucenter 아바타 rewrite 최적화
- location ^~ /ucenter {
- location ~ .*\.php?$
- {
- #fastcgi_pass unix:/tmp/php-cgi.sock;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- include fcgi.conf;
- }
- location /ucenter/data/avatar {
- log_not_found off;
- access_log off;
- location ~ /(.*)_big\.jpg$ {
- error_page 404 /ucenter/images/noavatar_big.gif;
- }
- location ~ /(.*)_middle\.jpg$ {
- error_page 404 /ucenter/images/noavatar_middle.gif;
- }
- location ~ /(.*)_small\.jpg$ {
- error_page 404 /ucenter/images/noavatar_small.gif;
- }
- expires 300;
- break;
- }
- }
jspace rewrite
- location ~ .*\.php?$
- {
- #fastcgi_pass unix:/tmp/php-cgi.sock;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- include fcgi.conf;
- }
- location ~* ^/index.php/
- {
- rewrite ^/index.php/(.*) /index.php?$1 break;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- include fcgi.conf;
- }
Nginx및 아파치 있는 Rewrite 규칙 인스턴스 대비
간단한 Nginx 및 아파치 재작성 규칙 차이가 크지 않지만, 기본적으로 완전히 호환 수 있다.예를 들면:
아파치 Rewrite 규칙:
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;
by 이상 예제 볼 수 있다, 아파치 있는 Rewrite 규칙 하다 Nginx 있는 Rewrite 규칙을 간단해: 아파치 있는 RewriteRule 명령 바꾸다 Nginx 있는 rewrite 명령, 아파치 있는 [L] 태그 바꾸다 Nginx 있는 last 표시, 중간 내용을 변하지 않는다.
만약 아파치 있는 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 이동 때 미세한 차이가 있다:
아파치 Rewrite 규칙:
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 중 요구.
한편 아파치 및 Nginx 있는 Rewrite 규칙 변수 이름 측 도 차이, 예를 들면:
아파치 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 규칙 같은 일부 기능 또는 유사한 명령, 태그 대응 관계:
아파치 있는 RewriteCond 명령 대응 Nginx 있는 if 명령,
아파치 있는 RewriteRule 명령 대응 Nginx 있는 rewrite 명령,
아파치 있는 [R] 태그 대응 Nginx 있는 redirect 표시,
아파치 있는 [P] 태그 대응 Nginx 있는 last 표시,
아파치 있는 [R, L] 태그 대응 Nginx 있는 redirect 표시,
아파치 있는 [P, L] 태그 대응 Nginx 있는 last 표시,
아파치 있는 [PT, L] 태그 대응 Nginx 있는 last 표시,
허용 지정된 도메인 액세스 권 선 다른 도메인 일률적으로 뛰어들다
Apache Rewrite 규칙:
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;
}
그리고 여기 한 도구 돼. 그냥 이 apache 규칙 전화한다 nginx 규칙