Estoy intentando agregar parámetros de URL a URI de solicitud específicas dentro del bloque del servidor.
Esto es lo que tengo hasta ahora:
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;
}
Sin embargo, esto sólo funciona cuando el URI de solicitud original no tiene ninguno de sus propios parámetros de URL (por ejemplo,www.example.com/testing/signup?abc=hola) Quiero conservar los parámetros de URL originales y agregar los míos propios.
Intenté cambiar la expresión regular a if ( $request_uri ~* "^/testing/signup" ) {
pero esto provoca un bucle.
¿Alguien puede ayudar?
**** ACTUALIZAR ****
He actualizado para probar esto:
location /testing/ {
rewrite ^/testing/signup$ /testing/signup?org=1231564 break;
try_files $uri $uri/ /testing/index.php$is_args$args;
}
Esto no pasa los parámetros de URL, pero al verificar los registros se puede ver que tanto el parámetro de URL existente como el nuevo están en la variable args. Pero, ¿cómo los introduzco en la solicitud GET para que el servidor pueda actuar sobre ellos?
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"
Respuesta1
Bienvenido a ServerFault.
La variablesolicitud_uricontiene "URI de solicitud original completo (con argumentos)". Es por eso que una solicitud con un parámetro existente no funcionó para el código original. En lugar de eso, podríamos usarurieso esnormalizado.
El bucle infinito se puede solucionar comprobando la existencia de los parámetros requeridos. Dado que Nginx no admite la condición if anidada, podemos usar una lógica diferente.
Entonces, el siguiente código funcionaría...
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;
}
Tenga en cuenta que los parámetros originales se adjuntan a nuestros parámetros agregados manualmente. Entonces, para una solicitud como www.example.com/testing/signup?abc=hello
, el URI se reescribe en www.example.com/testing/signup?org=7689879&type_id=65454&abc=hello
.