매개 변수가있는 URL에 대한 nginx 다시 쓰기 유형의 URL이 있습니다. http://www.example.com/?param1=val1&param2=&param3=val3&param4=val4&param5=val5 그리고 이것을 이것을 다음으로 리디렉션하고

이 유형의 URL이 있습니다.

http://www.example.com/?param1=val1&param2=&param3=val3&param4=val4&param5=val5

그리고 이것을 이것을 다음으로 리디렉션하고 싶습니다 :

http://www.example.com/newparam/val3/val4

그래서 나는이 재 작성 규칙을 성공하지 않고 시도했습니다.

rewrite "/?param1=val1&param2=&param3=(.+)&param4=(.+)&param5=(.+)" http://www.example.com/newparam/$1/$2 redirect;

nginx는 쿼리 매개 변수를 처리 할 수 ​​없습니까?

편집 : 모든 청원을 다시 작성하고 싶지 않습니다. 다른 URL에는 영향을주지 않고 해당 URL 만 다시 작성하면됩니다.



답변

좋아, rzab의 초기 도움 덕분 에이 작업 솔루션에 대한 그의 규칙을 재정의했습니다.

location / {
    if ($args ~* "/?param1=val1&param2=&param3=[0-9]+&param4=.+&param5=[0-9]+") {
        rewrite ^ http://www.example.com/newparam/$arg_param3/$arg_param4? last;
    }
}

무한 재귀를 피하기 위해 조건을 추가하고? 규칙의 끝에 초기 매개 변수를 제거하십시오 . 그것은 완벽하게 작동합니다 🙂


답변

위치 = / {
  다시 쓰기 ^ http://www.example.com/newparam/$arg_param3/$arg_param4;
}


답변