J'essaye de mettre en place une règle de réécriture nginx pour modifier l'URL avec la requête de requête.
Par exemple.:
www.abc.com/pathA/pathB/script.pl?paraA=10¶B=20
devrait être réécrit pour:
www.abc.com/pathA/pathB/script.pl.1020
J'essaie d'utiliser la variable $args
ou $query_string
(sur la base de la documentation nginx, ils sont identiques) pour vérifier si l'URL a une requête de requête. Mais j'ai trouvé $args
(ou $query_string
) n'a que le contenu avant &
.
Dans mon exemple, cela signifie $args = paraA=10
. Je ne peux pas obtenir le contenu des paramètres après &
. Je le détermine via le journal des erreurs nginx avec le niveau défini pour déboguer.
Aucune idée pourquoi je ne peux pas obtenir les paramètres de requête après &
dans la variable $args
ou $query_string
?
Vous devez utiliser $arg_<argname>
www.abc.com/pathA/pathB/script.pl?paraA=10¶B=20 sera réécrit sur: www.abc.com/pathA/pathB/script.pl.1020
Voici un exemple de configuration pour faire une telle chose
location /pathA/pathB/script.pl {
set $need_redirect "";
if ($arg_paraA) {
set $need_redirect "A";
}
if ($arg_paraB) {
set $need_redirect "B$need_redirect";
}
if ($need_redirect = "BA") {
rewrite ^(.*)$ $1.$arg_paraA$arg_paraB;
}
}
Le problème n'est pas causé par le fichier de configuration nginx. Cela est dû au fait que j'oublie les guillemets doubles lorsque j'ai envoyé une demande à l'aide de curl. Par exemple: curl "www.abc.com/pathA/pathB/script.pl?paraA=10¶B=20" Sans guillemet double, "& paraB = 20" ne sera jamais envoyé réellement.