2017-10-01 11 views
0

Je travaille sur un projet dont j'ai besoin pour configurer la règle de réécriture de nginx pour modifier l'URL avec la demande de requête. Par exemple:

www.abc.com/pathA/pathB/script.pl?paraA=10 & Parab = 20
sera réécrite à: www.abc.com/pathA/pathB/script.pl.1020 J'essaie d'utiliser la variable $ args ou $ query_string (en fonction de doc nginx ils sont identiques) pour vérifier si url a la requête comme je veux réécrire. Mais j'ai trouvé $ args (ou $ query_string) a seulement le contenu avant &.

Dans mon exemple, cela signifie $ args = paraA = 10. Je ne peux pas obtenir le contenu du paramètre après &. Je détermine ce journal d'erreur par nginx que j'ai mis au niveau de déboguer.

Toute idée de pourquoi je ne peux pas obtenir les paramètres de requête après & dans la variable $ args ou $ query_string?

Merci à l'avance.

+0

http://nginx.org/fr/docs/http/ngx_http_core_module.html#var_arg_ – lomereiter

Répondre

1

Vous devez utiliser $arg_<argname>

www.abc.com/pathA/pathB/script.pl?paraA=10 & Parab = 20 sera réécrite à: www.abc.com/pathA/pathB/ script.pl.1020

Voici une configuration exemple 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; 
    } 
} 
+0

Merci. J'ai essayé d'utiliser $ arg_ avant, cela n'a pas fonctionné pour moi non plus. Il semble $ arg_ est vide dans mon cas. C'est très bizarre. – buddha

+0

quelle version de nginx? Essayez avec la dernière version et voyez si cela aide –

+0

Oui, cela enverrait seulement paraA et non parB. Donc, vous devez vous assurer de faire des citations sûres pour l'url –

0

Le problème ne provient pas de fichier de configuration nginx. Il est causé par le fait que j'oublie la double citation quand j'ai envoyé une requête en utilisant curl. E.g .: curl "www.abc.com/pathA/pathB/script.pl?paraA=10 & paraB = 20" Sans guillemets, "& paraB = 20" ne jamais être envoyé réellement.