Nginx를 사용하여 요청 URI에 URL 매개변수 추가

Nginx를 사용하여 요청 URI에 URL 매개변수 추가

서버 블록 내의 특정 요청 URI에 URL 매개변수를 추가하려고 합니다.

이것이 내가 지금까지 가지고 있는 것입니다:

if ( $request_uri = "/testing/signup" ) {
    rewrite ^ https://www.example.com/testing/signup?org=7689879&type_id=65454 last;
}

location /testing/ {
    try_files $uri $uri/ /testing/index.php;
}

그러나 이는 원래 요청 URI에 자체 URL 매개변수가 없는 경우에만 작동합니다(예:www.example.com/testing/signup?abc=hello) 원래 URL 매개변수를 유지하고 나만의 매개변수를 추가하고 싶습니다.

정규식을 if로 변경하려고 시도했지만 ( $request_uri ~* "^/testing/signup" ) {이로 인해 루프가 발생합니다.

누구든지 도와줄 수 있나요?

**** 업데이트 ****

나는 이것을 시도하기 위해 업데이트했습니다 :

location /testing/ {
    rewrite ^/testing/signup$ /testing/signup?org=1231564 break;
    try_files $uri $uri/ /testing/index.php$is_args$args;
}

이는 URL 매개변수를 전달하지 않지만 로그를 확인할 때 기존 URL 매개변수와 새 URL 매개변수가 모두 args 변수에 있음을 확인할 수 있습니다. 하지만 서버에 대한 GET 요청에 이를 어떻게 적용할 수 있나요?

2021/08/03 02:27:07 [notice] 3202#3202: *27 "^/testing/signup$" matches "/testing/signup", client: 146.75.168.54, server: example.com, request: "GET /testing/signup?id=1 HTTP/2.0", host: "www.example.com"
2021/08/03 02:27:07 [notice] 3202#3202: *27 rewritten data: "/testing/signup", args: "org=1231564&id=1", client: 146.75.168.54, server: example.com, request: "GET /testing/signup?id=1 HTTP/2.0", host: "www.example.com"

답변1

ServerFault에 오신 것을 환영합니다.

변수request_uri"전체 원본 요청 URI(인수 포함)"가 포함되어 있습니다. 그렇기 때문에 기존 매개변수를 사용한 요청이 원래 코드에 대해 작동하지 않았습니다. 대신에 우리는 다음을 사용할 수 있습니다.우리그건표준화된.

무한 루프는 필수 매개변수가 있는지 확인하여 해결할 수 있습니다. Nginx는 중첩된 if 조건을 지원하지 않으므로 다른 논리를 사용할 수 있습니다.

따라서 다음 코드는 작동합니다 ...

error_page 418 @goodtogo;

location /testing/ {
    if ($arg_org != "") { return 418; }
    if ($arg_type_id != "") { return 418; }

    if ( $uri = "/testing/signup" ) { rewrite ^ /testing/signup?org=7689879&type_id=65454 redirect; }

    try_files $uri $uri/ /testing/index.php =404;
}

location / {}

location @goodtogo {
    try_files $uri $uri/ /testing/index.php =404;
}

원래 매개변수는 수동으로 추가된 매개변수에 추가됩니다. 따라서 와 같은 요청의 경우 www.example.com/testing/signup?abc=helloURI가 로 다시 작성됩니다 www.example.com/testing/signup?org=7689879&type_id=65454&abc=hello.

관련 정보