NGINX 리디렉션 규칙 쿼리 문자열에 대한 경로 변환

NGINX 리디렉션 규칙 쿼리 문자열에 대한 경로 변환

기존 Apache 규칙을 사용하여 URL을 다시 작성하기 위해 Helicon APE와 함께 실행되는 기존 IIS 앱이 하나 있습니다. 다음은 한 가지 예입니다.

RewriteRule ^/webapp/([^/]*)/([^/]*)(/.+)? /webapp/$4?$2=$3 [NC,L,P,QSA]

이러한 규칙의 경우 와 같은 원래 URL /webapp/f6/3/gx/1/default.htm/default.htm?f6=3&gx=1. 이는 APE(분명히 Apache에서도 마찬가지임)에서 다양한 수의 중간 경로를 지원합니다.

APE는 잘 확장되지 않고 로드 시 충돌이 발생하므로 다시 작성을 수행하고 뒤에서 IIS 서버에 대한 로드 밸런싱을 수행하는 NGINX를 설정하기 시작했습니다.

하지만 내가 발견한 한 가지 문제는 nginx 재작성에 대한 동일한 규칙이 동일한 방식으로 작동하지 않는다는 것입니다. 일치하도록 변환해야 했습니다.

rewrite ^/webapp/(.*)/([^/]+).htm /webapp/$2?$1;

실제로는 /webapp/f6/3/gx/1/default.htm반품을 위한 것입니다 /webapp/default.htm?f6/3/gx/1.

/x/y/g/z나는 경로 요소를 쿼리 문자열 쌍으로 변환하기 위해 nginx를 만드는 방법을 찾으려고 노력해 왔습니다 ?x=y&g=z. Apache는 자동으로 만드는 것처럼 보이지만 nginx는 그렇지 않으며 문서나 이 사이트 또는 StackOverflow의 다른 질문에서 아무것도 찾을 수 없습니다.

분명히 map을 사용하면 이 작업을 수행할 수 있지만 특정 사용법을 찾을 수 없으며 저는 이 작업을 수행하는 nginx 전문가가 아닙니다. 어떤 도움이나 표시. 환영받을 것입니다.

답변1

다시 쓰기 규칙을 올바르게 구성하면 모든 경로 요소가 사용될 때까지 각 반복에서 재귀 및 쿼리 매개 변수가 됩니다.

예를 들어:

rewrite ^(/webapp)/([^/]+)/([^/]+)(/.+)$ $1$4?$2=$3 redirect;

기존 쿼리 문자열을 자동으로 추가 하므로 rewrite위 문은 각 리디렉션을 통해 이를 확장합니다.

rewrite...last블록 내에 명령문을 배치하여 내부 리디렉션을 사용하여 동일한 트릭을 얻을 수 있습니다 location.

보다이 문서이상.

관련 정보