
기존 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
.
보다이 문서이상.