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