Nginx URL Rewrite – URL 전송 규칙
6296 단어 nginx
[php] if ($request method! ~ ^ (GET | HEAD) $) {\ # 요청 한 방법 이 GET 나 HEAD 가 아니라면 501 오류 return 501;} [/ php]
주의 하 세 요. if 구문 에서 두 개의 인자 (예 를 들 어 if ($request method! ~ ^ (GET) $| $request method! ~ ^ (HEAD) $) 를 동시에 판단 할 수 없습니다. 하지만 조금 만 생각해 보 세 요. 우 리 는 이러한 부족 함 을 보완 하여 특정한 수 요 를 만족 시 킬 수 있 는 더 좋 은 방법 이 있 습 니 다. 예 를 들 어 매우 흔히 볼 수 있 는 htaccess 정의 퍼 가기 규칙 은 다음 과 같 을 수 있 습 니 다.
[php] RewriteEngine On \ # 리 트 윗 기능 을 시작 합 니 다 RewriteBase / \ # 리 트 윗 의 기본 디 렉 터 리 RewriteCond% {REQUEST FILENAME}! -f \ # 전송 조건, 요청 한 파일 이 RewriteCond% {REQUEST FILENAME} 이 존재 하지 않 는 다 면! -d \ # 퍼 가기 조건, 요청 한 디 렉 터 리 에 RewriteRule 이 존재 하지 않 습 니 다. / index. php [L] \ # 퍼 가기 규칙, 파일 이나 디 렉 터 리 가 존재 하지 않 으 면 index. php 파일 로 퍼 가기 요청 합 니 다. 】 [/php]
위 에서 정의 한 퍼 가기 규칙 은 요청 한 파일 이 존재 하지 않 지만 존재 하 는 디 렉 터 리 가 아니라면 index. php 파일 로 퍼 가기 요청 을 한 다 는 것 입 니 다. 이상 의 퍼 가기 조건 은 대부분의 PHP 시스템 에 적 용 될 수 있 지만 퍼 가기 규칙 은 꼭 그렇지 않 습 니 다. 예 를 들 어 다음 퍼 가기 규칙 은 phpBB 시스템 에서 따 온 것 입 니 다.
[php] RewriteCond% {REQUEST FILENAME}! - f \ # 퍼 가기 조건, 요청 한 파일 에 RewriteCond% {REQUEST FILENAME} 이 존재 하지 않 는 다 면! - d \ # 퍼 가기 조건, 요청 한 디 렉 터 리 에 RewriteCond% {REQUEST FILENAME}! - l \ # 퍼 가기 규칙, 요청 한 파일 이 심 볼 릭 링크 RewriteRule ^ [a - z0 - 9 -] + /? (p ([0 - 9] +). html)? $/ viewforum. php? start = $2 [QSA, L, NC]\ # 퍼 가기 규칙, 정규 표현 식 을 만족 시 키 기 위 한 요청 을 viewforum 에 전달 합 니 다. [/ php]
세 번 째 퍼 가기 조건 을 잠시 무시 하고 심 볼 릭 링크 를 검 사 했 습 니 다. 퍼 가기 조건 은 앞의 예 와 같 지만 퍼 가기 규칙 은 일치 하지 않 습 니 다. 서버 (같은 IP) 에 wordpress 사이트 와 phpBB 사 이 트 를 동시에 만 들 겠 다 고 가정 하면 같은 퍼 가기 조건 을 공용 설정 으로 사용 할 것 입 니 다.
#
[php] if (-e $request_filename) { break; } [/php]
이 설정 은 이전 리 트 윗 조건 (RewriteCond) 과 같은 일 을 합 니 다. 이 설정 은 이 서버 에 있 는 모든 사이트 에 적 용 됩 니 다. (이 사이트 들 을 같은 서버 에 두 었 다 고 가정 합 니 다) 다음 에 서로 다른 사이트 에 다른 리 트 윗 을 설정 할 수 있 습 니 다. 예 를 들 어 wordpress 사이트:
[php] \ # blog. example. com 에 대한 퍼 가기 규칙 if ($host ~ * ^ blog. example. com $) {\ # host 에 blog. example. com 이 포함 되 어 있 으 면 if 블록 에 있 는 퍼 가기 규칙 rewrite 를 적용 합 니 다. ^(.*)$ /index.php?q=$1 last; break; } [/php]
이 곳 의 last 는 현재 퍼 가기 규칙 을 적용 하여 후속 규칙 과 일치 하지 않 고 찾 을 수 있 도록 보장 합 니 다. 가상 디 렉 터 리 의 설정 을 설명 하 는 다른 몇 편의 글 도 발 표 했 습 니 다.
가상 디 렉 터 리 를 Ngnix 로 설정 하여 phpBB 를 실행 하 는 방법; Nginx: how to fix directory resolution issue as well as internal re-directs in virtual hosting
가상 디 렉 터 리 를 Ngnix 기반 으로 설정 하 는 방법 이 장 에 대한 소 개 를 끝내기 위해 좀 더 깊이 들 어가 보 겠 습 니 다. '점' 으로 시작 하 는 파일 (예 를 들 어 htaccess) 이 다른 사용자 에 게 접근 하 는 것 을 피 하 는 방법 은 무엇 입 니까? Nginx 설정 파일 에 다음 설정 을 추가 합 니 다.
location ~ /. {
deny all;
}
이 세 줄 의 설정 은 서버 의 '점' 으로 시작 하 는 모든 외부 요청 을 거부 합 니 다. WWW 로 시작 하 는 URL 을 WWW 가 포함 되 지 않 은 URL 로 어떻게 전달 합 니까? 예 를 들 어 아래 설정 은 요청 할 수 있 습 니 다.http://www.example.com/yourpage 전달 하 다http://example.com/yourpage:
[php] if ($host ~ * ^ www. (. *)) {\ # 요청 한 host 에 ww (대소 문자 구분 없 음) 가 포함 되 어 있 으 면 확장 번호 에 일치 하 는 항목 을 $1 로 참조 합 니 다. set $host_without_www $1; rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1 contains ‘/yourpage’, not ‘www.example.net/yourpage’ } [/php]
설명: 이 예 는 Nginx 공식 사이트 의 문서 에서 나 온 것 입 니 다. Apache HTTPD 퍼 가기 규칙 을 Nginx 로 어떻게 옮 깁 니까? 저쪽 글 에서 몇 가지 관건 적 인 점 을 말 했 습 니 다. 그 중에서 가장 중요 한 것 은 HTTPD 의 퍼 가기 규칙 에서 '/' 로 시작 할 필요 가 없 지만 Nginx 는 '/' 로 시작 해 야 한 다 는 것 입 니 다. ,예 를 들 어 아파 치 의 퍼 가기 규칙 은 다음 과 같 을 수 있다.
[php] RewriteRule ^[a-z0-9_-]*-f([0-9]+)/?(p([0-9]+).html)?$ /viewforum.php?f=$1&start=$3 [QSA,L,NC] [/php]
같은 퍼 가기 규칙 은 Nginx 에서 이렇게 되 었 습 니 다.
[php] rewrite ^/[a-z0-9_-]*-f([0-9]+)/?(p([0-9]+).html)?$ /viewforum.php?f=$1&start=$3 last; [/php]
쉽 죠?
메모: 아파 치 의 전송 조건 은 Nginx 의 if 문 구 를 사용 해 야 합 니 다.
또 다른 문 제 는 어떻게 Nginx 로 하여 금 사용자 가 그림 이나 정적 자원 에 대한 요 구 를 기록 하지 못 하 게 합 니까? 그림 과 같은 정적 파일 의 클 라 이언 트 캐 시 만 료 시간 을 어떻게 확인 합 니까?
[php] # serve static files directly location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires 30d; } [/php]
이상 은 간단 한 소개 일 뿐 입 니 다. 여러분 이 우리 의 포럼 에 문 제 를 제기 하 시 는 것 을 환영 합 니 다.
큰 방 주: 이상 의 내용 은 제 가 번역 한 영어 Nginx URL 로 리 트 윗 한 글 입 니 다. 현재 Nginx 의 사용 범위 가 점점 넓 어 지고 점점 더 많은 사이트 시스템 이 Ngnix 의 품 에 안 기기 시 작 했 지만 Nginx 의 중국어 자료 (심지어 영어 자료 가 부족 합 니 다)비교적 적 습 니 다. 어제 Ngnix 의 URL 리 트 윗 을 설정 하 는 김 에 저녁 에 이 글 을 번역 해 왔 습 니 다. 영어 문 서 를 즐겨 읽 으 시 면 영어 원문 을 보 실 수 있 습 니 다.
큰 방 은 nginx rewrite 의 일부 인 자 를 보충 합 니 다.:
1. 정규 표현 식 일치, 그 중: ~ 대소 문 자 를 구분 하기 위해 일치 합 니 다 ~ * 대소 문 자 를 구분 하지 않 기 위해 일치 합 니 다! ~ 와! ~ * 대소 문 자 를 구분 하지 않 고 일치 하지 않 습 니 다. 대소 문 자 를 구분 하지 않 습 니 다. 일치 하지 않 습 니 다.
메모: Nginx 에 {m, n} 과 같은 정규 규칙 이 설정 되 어 있 을 때 조건 에 따옴표 2 를 붙 여야 합 니 다. 파일 과 디 렉 터 리 가 일치 합 니 다. 그 중에서: f 와! - f 는 파일 이 존재 하 는 지 여 부 를 판단 하 는 데 사 용 됩 니 다. - d 는 디 렉 터 리 - e 와! - e 는 파일 이 존재 하 는 지 여 부 를 판단 하 는 데 사 용 됩 니 다.태그, rewrite 가 완료 되 었 음 을 표시 합 니 다. 뒤의 규칙 break 와 last 유사 redirect 가 302 임시 리 셋 permanent 로 301 영구 리 셋 4. 사용 가능 한 전역 변 수 는 조건 으로 판단 할 수 있 습 니 다 (부분). $args $content_length $content_type $document_root $document_uri $host $http_user_agent $http_cookie $limit_rate $request_body_file $request_method $remote_addr $remote_port $remote_user $request_filename $request_uri $query_string $scheme $server_protocol $server_addr $server_name $server_port $uri
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.