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
.