Solution 1 :
Votre choix 1 :
return 301 $scheme://$host$request_uri;
C'est exactement ce que vous voulez.
Je ne sais pas pourquoi le rewrite ^ http://$host$request_uri? permanent;
entraînerait un 302 au lieu de 301. C'est la bonne syntaxe pour le forcer à renvoyer un 301.
Solution 2 :
Techniquement, vous pouvez utiliser les deux options. Ils peuvent fonctionner.
Selon la documentation NGINX, utilisez return
si tu peux . C'est plus simple et plus rapide car NGINX arrête de traiter la requête (et n'a pas à traiter une regex). Plus que cela, vous pouvez spécifier un code dans le 3xx série :
return (301 | 302 | 303 | 307) url;
Si vous avez un scénario où vous devez valider l'URL avec une expression régulière ou devez capturer des éléments dans l'URL d'origine (qui ne sont évidemment pas dans une variable NGINX correspondante), alors vous devez utiliser rewrite
. Vous devez savoir que rewrite
renvoie uniquement le code 301 ou 302.
rewrite regex URL [flag];
Vous pouvez en savoir plus sur le retour et la réécriture sur le site Web de NGINX.