Nginx dupliquant la chaîne de requête lors de la redirection

J’essaie de redirect tout le trafic des URL contenant “www”. à l’URL similaire qui ne le contient pas, mais lorsque je le fais, Nginx ajoute une chaîne de requête en double à la fin de l’URL.

Par exemple, l’utilisateur entre:

www.website.com/test/?_id=12345 

Et ils sont redirigés vers:

 website.com/test/?_id=12345?_id=12345 

Voici ma config:

 server { server_name www.website.com; return 301 $scheme://website$request_uri permanent; } server { server_name website.com # actual server stuff } 

J’ai essayé d’append un ‘?’ à la fin de la redirection après la partie “request_uri” car ce que j’ai lu devrait fonctionner, mais ce n’est pas le cas.

Votre configuration est invalide Vous semblez avoir mélangé la syntaxe du return et de la rewrite . Voir ce document pour plus de détails.

La variable $request_uri inclut déjà la chaîne de requête, cela devrait donc fonctionner avec return :

 return 301 $scheme://example.com$request_uri; 

La directive rewrite appenda la chaîne de requête à moins que a ? est annexé. Il est possible d’utiliser une directive de rewrite pour accomplir la même fonction, mais dans ce cas, ce serait exagéré.

Comme votre configuration est invalide, nginx est toujours en cours d’exécution avec une configuration antérieure, peut-être une expérience antérieure qui a placé $request_uri dans une directive de rewrite , d’où la chaîne de requête double.