web-dev-qa-db-fra.com

Faire le paramètre de vérification nginx dans l'url

Je veux vérifier si un paramètre est présent dans une URL dans nginx puis réécrire. Comment puis-je faire cela?

Par exemple, si l'URL est http://website.com/?mobile puis rediriger l'utilisateur vers http://m.website.com

17
user2650277

Vous feriez mieux d'utiliser http://example.com/?mobile=1 (Argument avec valeur). Dans ce cas, la vérification est simple:

if ($arg_mobile) {
    return 302 http://m.example.com/;
}

La vérification de l'existence d'arguments est généralement effectuée avec des expressions rationnelles comme if ($args ~ mobile) mais elle est sujette aux erreurs, car elle correspondra à mobile n'importe où, par exemple http://example.com/?tag=automobile.

33
Alexey Ten

Si vous savez que vous n'avez qu'un seul paramètre {{variable}} pour changer, vous pouvez détecter s'il existe comme ça

if ($request_uri ~ '\?{{variable}}') {
    ...
}

par exemple

if ($request_uri ~ '\?mobile') {
    return 302 https://m.example.com;
}

Je suggère également d'envisager d'utiliser cette redirection

http://{{domain}}.{{tld}}/mobile -> http://m.{{domain}}.{{tld}}

location ~ '/mobile'
    return 301 'https://m.{{domain}}.{{tld}}';
}

par exemple

location ~ '/mobile'
    return 301 'https://m.example.com';
}
1
BG Bruno