URL의 끝에 nginx 다시 쓰기 매개 변수 추가


13

URL 끝에 다음 매개 변수가 추가되도록 리버스 프록시를 구성해야합니다. &locale=de-de

이것은 거의 작동합니다.

rewrite ^(.*)$ $1&locale=de-de break;

그러나 문제는 '& locale = de-de' 가없는 경우 '?'가있는 경우 에만 추가해야한다는 것입니다. URL에서 ...

이를 위해 올바른 정규식을 공식화하는 데 도움을받을 수 있습니까?

또 다른 질문 : 이것을 사용하면 왜 내 URL에 물음표가 표시되지 않습니다 :
$ uri? $ args

또는 $ uri $ is_args $ args는 인코딩되지 않은 URL을 변환하며 물음표는 % 3f로 표시됩니다.

아이디어?

편집 : proxy_pass와 함께 사용하는 동안이 동작이 존재하는 것 같습니다. 간단히 다시 작성하면 실제로 잘 작동합니다.

답변:


15
  1. 에서 rewrite당신이 URL의에 일치하는 경로의 일부에 불과. 이는 $1쿼리 문자열을 포함하지 않음을 의미 합니다.
  2. 기본적으로 Nginx는 원래 쿼리 문자열을 다시 쓰기 대체에 추가합니다.

따라서 작성하는 것이 안전해야합니다

rewrite ^(.*)$ $1?locale=de-de break;

Nginx가 원래 쿼리 문자열을 추가하지 못하게 ?하려면 대체 URL 끝에 간단히 지정 하십시오.

rewrite ^(.*)$ $1?locale=de-de? break;

감사합니다! 나는 그것을 잘못한 것을 보지 못했다.
Sascha

A + 이것은 최고의 답변입니다
감사합니다.

3

rewrite대한 검색어에는 검색어 매개 변수가 포함되지 않으므로 다른 곳에서 테스트해야합니다.

시험:

if ($args !~* locale=de\-de){
    rewrite ^(.*)$ $1&locale=de-de last;
}


@Alexander 좋은 지적; 것을 rewrite요구 A는 last경우-안전합니다. 편집했습니다.
Shane Madden

3

rewrite요청 매개 변수의 URI의 경로 부분을 수정하지 않습니다. 내 경험상, 재 작성을 망쳐 놓으면 이상한 사이클이 생겨서 새로운 매개 변수가 광고 무한대로 추가됩니다. 다시 쓰기는 아마도 Nginx 에서이 작업을 수행하는 방법이 아닙니다.

대신, 지시문을 $args사용하여 변수를 수정해야합니다 set.

set $args $args&locale=de-de;

나는 그것이 $args변이되어야한다는 것에 동의하지 않는다 . 대신 @AlexanderAzarov의 솔루션을 참조하십시오.
감사합니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.