Anexar parâmetro de URL para solicitar URI usando Nginx

Anexar parâmetro de URL para solicitar URI usando Nginx

Estou tentando anexar parâmetros de URL a URIs de solicitação específicos no bloco do servidor.

Isto é o que tenho até agora:

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;
}

No entanto, isso só funciona quando o URI da solicitação original não possui nenhum parâmetro de URL próprio (por exemplowww.example.com/testing/signup?abc=hello) Quero manter os parâmetros de URL originais e adicionar os meus próprios.

Tentei alterar o regex para if, ( $request_uri ~* "^/testing/signup" ) {mas isso causa um loop.

Alguém pode ajudar?

**** ATUALIZAR ****

Eu atualizei para tentar isso:

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

Isso não passa os parâmetros de URL, mas ao verificar os logs é possível ver que tanto o parâmetro de URL existente quanto o novo estão na variável args. Mas como faço para colocá-los na solicitação GET para que o servidor possa agir sobre eles?

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"

Responder1

Bem-vindo ao ServerFault.

A variávelrequest_uricontém "URI de solicitação original completo (com argumentos)". É por isso que uma solicitação com parâmetro existente não funcionou para o código original. Em vez disso, poderíamos usaruriaquilo énormalizado.

O loop infinito pode ser corrigido verificando a existência dos parâmetros necessários. Como o Nginx não oferece suporte à condição if aninhada, podemos usar uma lógica diferente.

Então, o código a seguir funcionaria ...

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;
}

Saiba que os parâmetros originais são anexados aos nossos parâmetros adicionados manualmente. Portanto, para uma solicitação como www.example.com/testing/signup?abc=hello, o URI é reescrito em www.example.com/testing/signup?org=7689879&type_id=65454&abc=hello.

informação relacionada